Skip to content

Commit e210522

Browse files
authored
Merge pull request #669 from bashtage/final-changes
Final changes
2 parents e0f9d40 + dcc7936 commit e210522

File tree

5 files changed

+30
-72
lines changed

5 files changed

+30
-72
lines changed

.coveragerc

Lines changed: 0 additions & 40 deletions
This file was deleted.

ci/azure_template_posix.yml

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
PANDAS: 1.3.0
2424
STATSMODELS: 0.13.1
2525
XARRAY: 0.21.0
26-
FORMULAIC: 1.0.2
26+
FORMULAIC: 1.2.1
2727
test.wheel: true
2828
python310_mid_sdist:
2929
python.version: '3.10'
@@ -33,7 +33,7 @@ jobs:
3333
STATSMODELS: 0.13.1
3434
XARRAY: 2022.6.0
3535
XXHASH: true
36-
FORMULAIC: 1.0.2
36+
FORMULAIC: 1.2.1
3737
test.sdist: true
3838
python310_recent_wheel:
3939
python.version: '3.10'
@@ -42,16 +42,13 @@ jobs:
4242
PANDAS: 2.0.0
4343
STATSMODELS: 0.14.0
4444
XARRAY: 2023.4.0
45-
FORMULAIC: 1.1.0
45+
FORMULAIC: 1.2.1
4646
test.wheel: true
4747
python310_latest:
4848
python.version: '3.10'
49-
FORMULAIC: 1.2.0
49+
FORMULAIC: 1.2.1
5050
XXHASH: true
5151
PYARROW: true
52-
python310_no_cython:
53-
python.version: '3.10'
54-
BUILD_FLAGS: '-Csetup-args=-Dno-binary=true'
5552
python311_latest:
5653
python.version: '3.11'
5754
XXHASH: true
@@ -60,6 +57,11 @@ jobs:
6057
python.version: '3.12'
6158
XXHASH: true
6259
PYARROW: true
60+
python312_latest_no_binary:
61+
python.version: '3.12'
62+
XXHASH: true
63+
PYARROW: true
64+
BUILD_FLAGS: '-Csetup-args=-Dno-binary=true'
6365
python313_latest:
6466
python.version: '3.13'
6567
XXHASH: true
@@ -69,8 +71,8 @@ jobs:
6971
python.version: '3.12'
7072
XXHASH: true
7173
LM_TEST_COPY_ON_WRITE: 1
72-
python312_pre:
73-
python.version: '3.12'
74+
python313_pre:
75+
python.version: '3.13'
7476
pip.pre: true
7577
maxParallel: 10
7678

@@ -119,8 +121,8 @@ jobs:
119121
condition: eq(variables['test.wheel'], 'true')
120122
121123
- script: |
122-
echo python -m pip install --no-build-isolation -vv -e . ${FLAGS}
123-
python -m pip install --no-build-isolation -vv -e . ${FLAGS}
124+
echo python -m pip install --no-build-isolation -vv -e . ${BUILD_FLAGS}
125+
python -m pip install --no-build-isolation -vv -e . ${BUILD_FLAGS}
124126
displayName: 'Install linearmodels (editable)'
125127
condition: and(ne(variables['test.wheel'], 'true'), ne(variables['test.sdist'], 'true'))
126128
@@ -135,21 +137,17 @@ jobs:
135137
136138
- script: |
137139
echo "Testing editable install"
138-
if [[ ${COVERAGE} == "true" ]]; then
139-
export COVERAGE_OPTS="--cov=linearmodels --cov-report xml:coverage.xml --cov-report term"
140-
fi
141-
echo pytest -m "${PYTEST_PATTERN}" --junitxml=junit/test-results.xml -n auto --durations=25 ${COVERAGE_OPTS} linearmodels/tests
140+
export COVERAGE_OPTS="--cov=linearmodels --cov-report xml:coverage.xml --cov-report term"
141+
echo pytest -m "${PYTEST_PATTERN}" --junitxml=junit/test-results.xml -n auto --durations=25 ${COVERAGE_OPTS} ${BUILD_FLAGS} linearmodels/tests
142142
pytest -m "${PYTEST_PATTERN}" --junitxml=junit/test-results.xml -n auto --durations=25 ${COVERAGE_OPTS} linearmodels/tests
143143
displayName: 'Run tests (editable)'
144144
condition: and(and(ne(variables['test.wheel'], 'true'), ne(variables['test.sdist'], 'true')), ne(variables['pip.pre'], 'true'))
145145
146146
- script: |
147147
echo "Testing pip-pre"
148-
if [[ ${COVERAGE} == "true" ]]; then
149-
export COVERAGE_OPTS="--cov-config .coveragerc --cov=linearmodels --cov-report xml:coverage.xml --cov-report term"
150-
fi
151-
echo pytest -m "${PYTEST_PATTERN}" --junitxml=junit/test-results.xml -n auto --durations=25 ${COVERAGE_OPTS} linearmodels/tests
152-
pytest -m "${PYTEST_PATTERN}" --junitxml=junit/test-results.xml -n auto --durations=25 ${COVERAGE_OPTS} linearmodels/tests
148+
export COVERAGE_OPTS="--cov=linearmodels --cov-report xml:coverage.xml --cov-report term"
149+
echo pytest -m "${PYTEST_PATTERN}" --junitxml=junit/test-results.xml -n auto --durations=25 ${COVERAGE_OPTS} ${BUILD_FLAGS} linearmodels/tests
150+
pytest -m "${PYTEST_PATTERN}" --junitxml=junit/test-results.xml -n auto --durations=25 ${COVERAGE_OPTS} linearmodels/tests
153151
displayName: 'Run tests (pip pre)'
154152
condition: eq(variables['pip.pre'], 'true')
155153
continueOnError: true
@@ -163,11 +161,11 @@ jobs:
163161
- task: PublishCodeCoverageResults@2
164162
inputs:
165163
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
166-
condition: and(eq(variables['coverage'], 'true'), ne(variables['test.install'], 'true'))
164+
condition: and(ne(variables['test.sdist'], 'true'), ne(variables['test.wheel'], 'true'))
167165

168166
- script: |
169167
curl -Os https://uploader.codecov.io/latest/linux/codecov
170168
chmod +x codecov
171169
./codecov -f coverage.xml -F adder -F subtractor
172170
displayName: 'Codecov upload'
173-
condition: and(eq(variables['coverage'], 'true'), ne(variables['test.install'], 'true'))
171+
condition: and(ne(variables['test.sdist'], 'true'), ne(variables['test.wheel'], 'true'))

linearmodels/meson.build

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ inc_np = include_directories(incdir_numpy, is_system: true)
2929
# Copy the main __init__.py to the build dir.
3030
# Some submodules (linalg, special, optimize) add pxd files to this.
3131
# Needed to trick Cython, it won't do a relative import outside a package
32-
_cython_tree = [fs.copyfile('__init__.py')]
3332
cython_args = [
3433
'-Xcpow=True',
3534
'-Xboundscheck=False',

linearmodels/tests/panel/test_data.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ def test_general_demean_oneway(mi_df):
656656
dm1 = y.demean("time")
657657
g = DataFrame(y.time_ids, index=y.index)
658658
dm2 = y.general_demean(g)
659-
assert_allclose(dm1.values2d, dm2.values2d)
659+
assert_allclose(dm1.values2d, dm2.values2d, atol=1e-10)
660660

661661
g = DataFrame(np.random.randint(0, 10, g.shape), index=y.index)
662662
dm2 = y.general_demean(g)
@@ -672,7 +672,7 @@ def test_general_demean_twoway(mi_df):
672672
g = DataFrame(y.entity_ids, index=y.index)
673673
g["column2"] = Series(y.time_ids.squeeze(), index=y.index)
674674
dm2 = y.general_demean(g)
675-
assert_allclose(dm1.values2d, dm2.values2d)
675+
assert_allclose(dm1.values2d, dm2.values2d, atol=1e-10)
676676

677677
g = DataFrame(np.random.randint(0, 10, g.shape), index=y.index)
678678
dm2 = y.general_demean(g)
@@ -692,24 +692,24 @@ def test_general_unit_weighted_demean_oneway(mi_df):
692692
weights = PanelData(g).copy()
693693
weights.dataframe.iloc[:, :] = 1
694694
dm2 = y.general_demean(g, weights)
695-
assert_allclose(dm1.values2d, dm2.values2d)
695+
assert_allclose(dm1.values2d, dm2.values2d, atol=1e-10)
696696
dm3 = y.general_demean(g)
697-
assert_allclose(dm3.values2d, dm2.values2d)
697+
assert_allclose(dm3.values2d, dm2.values2d, atol=1e-10)
698698

699699
dm1 = y.demean("time")
700700
g = PanelData(DataFrame(y.time_ids, index=y.index))
701701
dm2 = y.general_demean(g, weights)
702-
assert_allclose(dm1.values2d, dm2.values2d)
702+
assert_allclose(dm1.values2d, dm2.values2d, atol=1e-10)
703703
dm3 = y.general_demean(g)
704-
assert_allclose(dm3.values2d, dm2.values2d)
704+
assert_allclose(dm3.values2d, dm2.values2d, atol=1e-10)
705705

706706
g = PanelData(DataFrame(np.random.randint(0, 10, g.dataframe.shape), index=y.index))
707707
dm2 = y.general_demean(g, weights)
708708
dm3 = y.general_demean(g)
709709
g = Categorical(g.dataframe.iloc[:, 0])
710710
d = get_dummies(g)
711711
dm1 = y.values2d - d @ lstsq(d, y.values2d, rcond=None)[0]
712-
assert_allclose(dm1, dm2.values2d)
712+
assert_allclose(dm1, dm2.values2d, atol=1e-10)
713713
assert_allclose(dm3.values2d, dm2.values2d, atol=1e-10)
714714

715715

@@ -723,12 +723,12 @@ def test_general_weighted_demean_oneway(mi_df):
723723
dm1 = y.demean("entity", weights=w)
724724
g = PanelData(DataFrame(y.entity_ids, index=y.index))
725725
dm2 = y.general_demean(g, w)
726-
assert_allclose(dm1.values2d, dm2.values2d)
726+
assert_allclose(dm1.values2d, dm2.values2d, atol=1e-10)
727727

728728
dm1 = y.demean("time", weights=w)
729729
g = PanelData(DataFrame(y.time_ids, index=y.index))
730730
dm2 = y.general_demean(g, w)
731-
assert_allclose(dm1.values2d, dm2.values2d)
731+
assert_allclose(dm1.values2d, dm2.values2d, atol=1e-10)
732732

733733
g = PanelData(DataFrame(np.random.randint(0, 10, g.dataframe.shape), index=y.index))
734734
dm2 = y.general_demean(g, w)

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ statsmodels>=0.13.0
55
mypy_extensions>=0.4
66
pyhdfe>=0.1
77
formulaic>=1.0.2
8+
wrapt!=2.0.0rc3

0 commit comments

Comments
 (0)