Apply ruff formatting and safe lint fixes - #1061

Open
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting
Open

Apply ruff formatting and safe lint fixes#1061
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting

Conversation

@kroenlein

@kroenleinkroenlein commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

The only purpose of the PR is running all package lines through ruff so that future formatting issues do not distract from code changes.

PR Type:

  • Breaking change (fix or feature that would cause existing functionality to change)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Maintenance (non-breaking change to assist developers)

Adherence to team decisions

  • I have added tests for 100% coverage
  • I have written Numpy-style docstrings for every method and class.
  • I have communicated the downstream consequences of the PR to others.
  • I have bumped the version in __version__.py

kroenleinand others added 2 commits August 6, 2026 09:09
…igial-test-fields
[v5.0] Remove vestigial experimental fields from test fixture
Ran `ruff format` and `ruff check --fix` (safe fixes only, line-length 99)
over all Python files in src/ and tests/.
Resolved conflicts with the project's flake8 configuration:
- Disabled RUF100 during the fix so noqa comments flake8 relies on
(D-codes, E501, W505) are preserved.
- Hand-wrapped 8 f-strings that exceeded 99 chars after .format() -> f-string
conversion.
- Added E203 to the flake8 ignore list (standard ruff/black slice-spacing
exception).
Fixed two autofixes that would have broken the test suite:
- Restored the load-bearing import order in tests/utils/fakes/__init__.py
(marked # isort: skip_file) to avoid a circular import.
- Restored the pytest fixture import in tests/serialization/test_scorers.py
(marked # noqa: F401).
flake8 is clean and all 1237 tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@kroenlein
kroenlein marked this pull request as ready for review August 7, 2026 02:36
@kroenlein
kroenlein requested a review from a team as a code ownerAugust 7, 2026 02:36
Base automatically changed from release/5.0 to mainAugust 7, 2026 15:19
Comment threadtests/_util/test_functions.py Fixed
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Comment threadsrc/citrine/gemtables/variables.py Outdated
Comment threadsrc/citrine/informatics/design_spaces/subspace.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/predictor_evaluation_result.py Outdated
Comment threadsrc/citrine/resources/ingestion.py Outdated
Comment threadsrc/citrine/resources/ingestion.py
Comment on lines +76 to +89
properties = Optional(
List(
Union(
[
LinkOrElse(GEMDPropertyTemplate),
SpecifiedMixedList(
[LinkOrElse(GEMDPropertyTemplate), Optional(Object(BaseBounds))]
),
]
)
),
"properties",
override=True,
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oof. I hate this. However, it's more an expression of how messy the definition of the serde stuff is generally, laid bare by the complication of the type itself. So not sure there's anything to be done. Ugh.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created an alias for LinkOrElse(GEMDPropertyTemplate) and swapped the Union to a |. I think it's more legible.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the change you described made it into the commit? At least, I don't see it above.

| LinkByUID
| Sequence[PropertyTemplate | LinkByUID | BaseBounds | None]
]
| None = None,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I continue to think multi-line type definitions in the middle of a function definition are the work of the devil. But I'm not sure a super long line is much better...

Comment threadtests/_serialization/test_container_properties.py Outdated
Comment threadtests/gemd_query/test_gemd_query.py Outdated
Comment threadtests/resources/test_branch.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_table_config.py Outdated
Comment threadtests/resources/test_templates.py Outdated
Comment threadtests/test_citrine.py Outdated
Comment threadtests/test_session.py Outdated
Follow-up to the ruff-formatting pass, addressing Austin's review feedback
and applying the same fixes to unflagged instances of each concern type.
- Add [tool.ruff] config: skip-magic-trailing-comma (collapses single-line
collections instead of exploding them) with isort.split-on-trailing-comma
disabled for compatibility.
- Convert .format() calls on string literals to f-strings.
- Drop orphaned `# pragma: no cover` comments left after `pass` removal.
- Refactor split-operand/wrapped asserts to keep operands together (extract
locals, loop over cases, lambda accessors) and move comments that forced
line wraps above their expressions.
- gemtables/variables.py: extract the repeated ternary into a module-level
`_build_attribute_constraints` helper and hoist the duplicated
`_AttributeType`/`_ObjectType`/`_ConstraintType` aliases to module scope.
- Restore correct (separate) LinkOrElse instances in the template property
definitions; shared Property descriptors break serialization-path assignment.
- validate_type: raise ValueError instead of bare Exception.
- Cover PvA __iter__ explicitly after switching next(iter(...)) reads to [].
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment threadsrc/citrine/_utils/functions.py
Comment threadtests/resources/test_table_config.py
Comment threadtests/resources/test_team.py
Comment threadtests/serialization/test_dimensions.py
@anoto-moniz

Copy link
Copy Markdown
Collaborator

@kroenlein With the exception of #1061 (comment), this looks great! Once you get that squared away, I'll give you a stamp, and update my workflow to use uv ruff.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kroenlein@anoto-moniz@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Apply ruff formatting and safe lint fixes - #1061

Open
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting
Open

Apply ruff formatting and safe lint fixes#1061
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting

Conversation

@kroenlein

@kroenleinkroenlein commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

The only purpose of the PR is running all package lines through ruff so that future formatting issues do not distract from code changes.

PR Type:

  • Breaking change (fix or feature that would cause existing functionality to change)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Maintenance (non-breaking change to assist developers)

Adherence to team decisions

  • I have added tests for 100% coverage
  • I have written Numpy-style docstrings for every method and class.
  • I have communicated the downstream consequences of the PR to others.
  • I have bumped the version in __version__.py

kroenleinand others added 2 commits August 6, 2026 09:09
…igial-test-fields
[v5.0] Remove vestigial experimental fields from test fixture
Ran `ruff format` and `ruff check --fix` (safe fixes only, line-length 99)
over all Python files in src/ and tests/.
Resolved conflicts with the project's flake8 configuration:
- Disabled RUF100 during the fix so noqa comments flake8 relies on
(D-codes, E501, W505) are preserved.
- Hand-wrapped 8 f-strings that exceeded 99 chars after .format() -> f-string
conversion.
- Added E203 to the flake8 ignore list (standard ruff/black slice-spacing
exception).
Fixed two autofixes that would have broken the test suite:
- Restored the load-bearing import order in tests/utils/fakes/__init__.py
(marked # isort: skip_file) to avoid a circular import.
- Restored the pytest fixture import in tests/serialization/test_scorers.py
(marked # noqa: F401).
flake8 is clean and all 1237 tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@kroenlein
kroenlein marked this pull request as ready for review August 7, 2026 02:36
@kroenlein
kroenlein requested a review from a team as a code ownerAugust 7, 2026 02:36
Base automatically changed from release/5.0 to mainAugust 7, 2026 15:19
Comment threadtests/_util/test_functions.py Fixed
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Comment threadsrc/citrine/gemtables/variables.py Outdated
Comment threadsrc/citrine/informatics/design_spaces/subspace.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/predictor_evaluation_result.py Outdated
Comment threadsrc/citrine/resources/ingestion.py Outdated
Comment threadsrc/citrine/resources/ingestion.py
Comment on lines +76 to +89
properties = Optional(
List(
Union(
[
LinkOrElse(GEMDPropertyTemplate),
SpecifiedMixedList(
[LinkOrElse(GEMDPropertyTemplate), Optional(Object(BaseBounds))]
),
]
)
),
"properties",
override=True,
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oof. I hate this. However, it's more an expression of how messy the definition of the serde stuff is generally, laid bare by the complication of the type itself. So not sure there's anything to be done. Ugh.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created an alias for LinkOrElse(GEMDPropertyTemplate) and swapped the Union to a |. I think it's more legible.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the change you described made it into the commit? At least, I don't see it above.

| LinkByUID
| Sequence[PropertyTemplate | LinkByUID | BaseBounds | None]
]
| None = None,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I continue to think multi-line type definitions in the middle of a function definition are the work of the devil. But I'm not sure a super long line is much better...

Comment threadtests/_serialization/test_container_properties.py Outdated
Comment threadtests/gemd_query/test_gemd_query.py Outdated
Comment threadtests/resources/test_branch.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_table_config.py Outdated
Comment threadtests/resources/test_templates.py Outdated
Comment threadtests/test_citrine.py Outdated
Comment threadtests/test_session.py Outdated
Follow-up to the ruff-formatting pass, addressing Austin's review feedback
and applying the same fixes to unflagged instances of each concern type.
- Add [tool.ruff] config: skip-magic-trailing-comma (collapses single-line
collections instead of exploding them) with isort.split-on-trailing-comma
disabled for compatibility.
- Convert .format() calls on string literals to f-strings.
- Drop orphaned `# pragma: no cover` comments left after `pass` removal.
- Refactor split-operand/wrapped asserts to keep operands together (extract
locals, loop over cases, lambda accessors) and move comments that forced
line wraps above their expressions.
- gemtables/variables.py: extract the repeated ternary into a module-level
`_build_attribute_constraints` helper and hoist the duplicated
`_AttributeType`/`_ObjectType`/`_ConstraintType` aliases to module scope.
- Restore correct (separate) LinkOrElse instances in the template property
definitions; shared Property descriptors break serialization-path assignment.
- validate_type: raise ValueError instead of bare Exception.
- Cover PvA __iter__ explicitly after switching next(iter(...)) reads to [].
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment threadsrc/citrine/_utils/functions.py
Comment threadtests/resources/test_table_config.py
Comment threadtests/resources/test_team.py
Comment threadtests/serialization/test_dimensions.py
@anoto-moniz

Copy link
Copy Markdown
Collaborator

@kroenlein With the exception of #1061 (comment), this looks great! Once you get that squared away, I'll give you a stamp, and update my workflow to use uv ruff.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kroenlein@anoto-moniz@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Apply ruff formatting and safe lint fixes - #1061

Open
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting
Open

Apply ruff formatting and safe lint fixes#1061
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting

Conversation

@kroenlein

@kroenleinkroenlein commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

The only purpose of the PR is running all package lines through ruff so that future formatting issues do not distract from code changes.

PR Type:

  • Breaking change (fix or feature that would cause existing functionality to change)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Maintenance (non-breaking change to assist developers)

Adherence to team decisions

  • I have added tests for 100% coverage
  • I have written Numpy-style docstrings for every method and class.
  • I have communicated the downstream consequences of the PR to others.
  • I have bumped the version in __version__.py

kroenleinand others added 2 commits August 6, 2026 09:09
…igial-test-fields
[v5.0] Remove vestigial experimental fields from test fixture
Ran `ruff format` and `ruff check --fix` (safe fixes only, line-length 99)
over all Python files in src/ and tests/.
Resolved conflicts with the project's flake8 configuration:
- Disabled RUF100 during the fix so noqa comments flake8 relies on
(D-codes, E501, W505) are preserved.
- Hand-wrapped 8 f-strings that exceeded 99 chars after .format() -> f-string
conversion.
- Added E203 to the flake8 ignore list (standard ruff/black slice-spacing
exception).
Fixed two autofixes that would have broken the test suite:
- Restored the load-bearing import order in tests/utils/fakes/__init__.py
(marked # isort: skip_file) to avoid a circular import.
- Restored the pytest fixture import in tests/serialization/test_scorers.py
(marked # noqa: F401).
flake8 is clean and all 1237 tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@kroenlein
kroenlein marked this pull request as ready for review August 7, 2026 02:36
@kroenlein
kroenlein requested a review from a team as a code ownerAugust 7, 2026 02:36
Base automatically changed from release/5.0 to mainAugust 7, 2026 15:19
Comment threadtests/_util/test_functions.py Fixed
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Comment threadsrc/citrine/gemtables/variables.py Outdated
Comment threadsrc/citrine/informatics/design_spaces/subspace.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/predictor_evaluation_result.py Outdated
Comment threadsrc/citrine/resources/ingestion.py Outdated
Comment threadsrc/citrine/resources/ingestion.py
Comment on lines +76 to +89
properties = Optional(
List(
Union(
[
LinkOrElse(GEMDPropertyTemplate),
SpecifiedMixedList(
[LinkOrElse(GEMDPropertyTemplate), Optional(Object(BaseBounds))]
),
]
)
),
"properties",
override=True,
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oof. I hate this. However, it's more an expression of how messy the definition of the serde stuff is generally, laid bare by the complication of the type itself. So not sure there's anything to be done. Ugh.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created an alias for LinkOrElse(GEMDPropertyTemplate) and swapped the Union to a |. I think it's more legible.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the change you described made it into the commit? At least, I don't see it above.

| LinkByUID
| Sequence[PropertyTemplate | LinkByUID | BaseBounds | None]
]
| None = None,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I continue to think multi-line type definitions in the middle of a function definition are the work of the devil. But I'm not sure a super long line is much better...

Comment threadtests/_serialization/test_container_properties.py Outdated
Comment threadtests/gemd_query/test_gemd_query.py Outdated
Comment threadtests/resources/test_branch.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_table_config.py Outdated
Comment threadtests/resources/test_templates.py Outdated
Comment threadtests/test_citrine.py Outdated
Comment threadtests/test_session.py Outdated
Follow-up to the ruff-formatting pass, addressing Austin's review feedback
and applying the same fixes to unflagged instances of each concern type.
- Add [tool.ruff] config: skip-magic-trailing-comma (collapses single-line
collections instead of exploding them) with isort.split-on-trailing-comma
disabled for compatibility.
- Convert .format() calls on string literals to f-strings.
- Drop orphaned `# pragma: no cover` comments left after `pass` removal.
- Refactor split-operand/wrapped asserts to keep operands together (extract
locals, loop over cases, lambda accessors) and move comments that forced
line wraps above their expressions.
- gemtables/variables.py: extract the repeated ternary into a module-level
`_build_attribute_constraints` helper and hoist the duplicated
`_AttributeType`/`_ObjectType`/`_ConstraintType` aliases to module scope.
- Restore correct (separate) LinkOrElse instances in the template property
definitions; shared Property descriptors break serialization-path assignment.
- validate_type: raise ValueError instead of bare Exception.
- Cover PvA __iter__ explicitly after switching next(iter(...)) reads to [].
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment threadsrc/citrine/_utils/functions.py
Comment threadtests/resources/test_table_config.py
Comment threadtests/resources/test_team.py
Comment threadtests/serialization/test_dimensions.py
@anoto-moniz

Copy link
Copy Markdown
Collaborator

@kroenlein With the exception of #1061 (comment), this looks great! Once you get that squared away, I'll give you a stamp, and update my workflow to use uv ruff.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kroenlein@anoto-moniz@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Apply ruff formatting and safe lint fixes - #1061

Open
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting
Open

Apply ruff formatting and safe lint fixes#1061
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting

Conversation

@kroenlein

@kroenleinkroenlein commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

The only purpose of the PR is running all package lines through ruff so that future formatting issues do not distract from code changes.

PR Type:

  • Breaking change (fix or feature that would cause existing functionality to change)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Maintenance (non-breaking change to assist developers)

Adherence to team decisions

  • I have added tests for 100% coverage
  • I have written Numpy-style docstrings for every method and class.
  • I have communicated the downstream consequences of the PR to others.
  • I have bumped the version in __version__.py

kroenleinand others added 2 commits August 6, 2026 09:09
…igial-test-fields
[v5.0] Remove vestigial experimental fields from test fixture
Ran `ruff format` and `ruff check --fix` (safe fixes only, line-length 99)
over all Python files in src/ and tests/.
Resolved conflicts with the project's flake8 configuration:
- Disabled RUF100 during the fix so noqa comments flake8 relies on
(D-codes, E501, W505) are preserved.
- Hand-wrapped 8 f-strings that exceeded 99 chars after .format() -> f-string
conversion.
- Added E203 to the flake8 ignore list (standard ruff/black slice-spacing
exception).
Fixed two autofixes that would have broken the test suite:
- Restored the load-bearing import order in tests/utils/fakes/__init__.py
(marked # isort: skip_file) to avoid a circular import.
- Restored the pytest fixture import in tests/serialization/test_scorers.py
(marked # noqa: F401).
flake8 is clean and all 1237 tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@kroenlein
kroenlein marked this pull request as ready for review August 7, 2026 02:36
@kroenlein
kroenlein requested a review from a team as a code ownerAugust 7, 2026 02:36
Base automatically changed from release/5.0 to mainAugust 7, 2026 15:19
Comment threadtests/_util/test_functions.py Fixed
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Comment threadsrc/citrine/gemtables/variables.py Outdated
Comment threadsrc/citrine/informatics/design_spaces/subspace.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/predictor_evaluation_result.py Outdated
Comment threadsrc/citrine/resources/ingestion.py Outdated
Comment threadsrc/citrine/resources/ingestion.py
Comment on lines +76 to +89
properties = Optional(
List(
Union(
[
LinkOrElse(GEMDPropertyTemplate),
SpecifiedMixedList(
[LinkOrElse(GEMDPropertyTemplate), Optional(Object(BaseBounds))]
),
]
)
),
"properties",
override=True,
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oof. I hate this. However, it's more an expression of how messy the definition of the serde stuff is generally, laid bare by the complication of the type itself. So not sure there's anything to be done. Ugh.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created an alias for LinkOrElse(GEMDPropertyTemplate) and swapped the Union to a |. I think it's more legible.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the change you described made it into the commit? At least, I don't see it above.

| LinkByUID
| Sequence[PropertyTemplate | LinkByUID | BaseBounds | None]
]
| None = None,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I continue to think multi-line type definitions in the middle of a function definition are the work of the devil. But I'm not sure a super long line is much better...

Comment threadtests/_serialization/test_container_properties.py Outdated
Comment threadtests/gemd_query/test_gemd_query.py Outdated
Comment threadtests/resources/test_branch.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_table_config.py Outdated
Comment threadtests/resources/test_templates.py Outdated
Comment threadtests/test_citrine.py Outdated
Comment threadtests/test_session.py Outdated
Follow-up to the ruff-formatting pass, addressing Austin's review feedback
and applying the same fixes to unflagged instances of each concern type.
- Add [tool.ruff] config: skip-magic-trailing-comma (collapses single-line
collections instead of exploding them) with isort.split-on-trailing-comma
disabled for compatibility.
- Convert .format() calls on string literals to f-strings.
- Drop orphaned `# pragma: no cover` comments left after `pass` removal.
- Refactor split-operand/wrapped asserts to keep operands together (extract
locals, loop over cases, lambda accessors) and move comments that forced
line wraps above their expressions.
- gemtables/variables.py: extract the repeated ternary into a module-level
`_build_attribute_constraints` helper and hoist the duplicated
`_AttributeType`/`_ObjectType`/`_ConstraintType` aliases to module scope.
- Restore correct (separate) LinkOrElse instances in the template property
definitions; shared Property descriptors break serialization-path assignment.
- validate_type: raise ValueError instead of bare Exception.
- Cover PvA __iter__ explicitly after switching next(iter(...)) reads to [].
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment threadsrc/citrine/_utils/functions.py
Comment threadtests/resources/test_table_config.py
Comment threadtests/resources/test_team.py
Comment threadtests/serialization/test_dimensions.py
@anoto-moniz

Copy link
Copy Markdown
Collaborator

@kroenlein With the exception of #1061 (comment), this looks great! Once you get that squared away, I'll give you a stamp, and update my workflow to use uv ruff.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kroenlein@anoto-moniz@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Apply ruff formatting and safe lint fixes - #1061

Open
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting
Open

Apply ruff formatting and safe lint fixes#1061
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting

Conversation

@kroenlein

@kroenleinkroenlein commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

The only purpose of the PR is running all package lines through ruff so that future formatting issues do not distract from code changes.

PR Type:

  • Breaking change (fix or feature that would cause existing functionality to change)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Maintenance (non-breaking change to assist developers)

Adherence to team decisions

  • I have added tests for 100% coverage
  • I have written Numpy-style docstrings for every method and class.
  • I have communicated the downstream consequences of the PR to others.
  • I have bumped the version in __version__.py

kroenleinand others added 2 commits August 6, 2026 09:09
…igial-test-fields
[v5.0] Remove vestigial experimental fields from test fixture
Ran `ruff format` and `ruff check --fix` (safe fixes only, line-length 99)
over all Python files in src/ and tests/.
Resolved conflicts with the project's flake8 configuration:
- Disabled RUF100 during the fix so noqa comments flake8 relies on
(D-codes, E501, W505) are preserved.
- Hand-wrapped 8 f-strings that exceeded 99 chars after .format() -> f-string
conversion.
- Added E203 to the flake8 ignore list (standard ruff/black slice-spacing
exception).
Fixed two autofixes that would have broken the test suite:
- Restored the load-bearing import order in tests/utils/fakes/__init__.py
(marked # isort: skip_file) to avoid a circular import.
- Restored the pytest fixture import in tests/serialization/test_scorers.py
(marked # noqa: F401).
flake8 is clean and all 1237 tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@kroenlein
kroenlein marked this pull request as ready for review August 7, 2026 02:36
@kroenlein
kroenlein requested a review from a team as a code ownerAugust 7, 2026 02:36
Base automatically changed from release/5.0 to mainAugust 7, 2026 15:19
Comment threadtests/_util/test_functions.py Fixed
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Comment threadsrc/citrine/gemtables/variables.py Outdated
Comment threadsrc/citrine/informatics/design_spaces/subspace.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/predictor_evaluation_result.py Outdated
Comment threadsrc/citrine/resources/ingestion.py Outdated
Comment threadsrc/citrine/resources/ingestion.py
Comment on lines +76 to +89
properties = Optional(
List(
Union(
[
LinkOrElse(GEMDPropertyTemplate),
SpecifiedMixedList(
[LinkOrElse(GEMDPropertyTemplate), Optional(Object(BaseBounds))]
),
]
)
),
"properties",
override=True,
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oof. I hate this. However, it's more an expression of how messy the definition of the serde stuff is generally, laid bare by the complication of the type itself. So not sure there's anything to be done. Ugh.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created an alias for LinkOrElse(GEMDPropertyTemplate) and swapped the Union to a |. I think it's more legible.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the change you described made it into the commit? At least, I don't see it above.

| LinkByUID
| Sequence[PropertyTemplate | LinkByUID | BaseBounds | None]
]
| None = None,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I continue to think multi-line type definitions in the middle of a function definition are the work of the devil. But I'm not sure a super long line is much better...

Comment threadtests/_serialization/test_container_properties.py Outdated
Comment threadtests/gemd_query/test_gemd_query.py Outdated
Comment threadtests/resources/test_branch.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_table_config.py Outdated
Comment threadtests/resources/test_templates.py Outdated
Comment threadtests/test_citrine.py Outdated
Comment threadtests/test_session.py Outdated
Follow-up to the ruff-formatting pass, addressing Austin's review feedback
and applying the same fixes to unflagged instances of each concern type.
- Add [tool.ruff] config: skip-magic-trailing-comma (collapses single-line
collections instead of exploding them) with isort.split-on-trailing-comma
disabled for compatibility.
- Convert .format() calls on string literals to f-strings.
- Drop orphaned `# pragma: no cover` comments left after `pass` removal.
- Refactor split-operand/wrapped asserts to keep operands together (extract
locals, loop over cases, lambda accessors) and move comments that forced
line wraps above their expressions.
- gemtables/variables.py: extract the repeated ternary into a module-level
`_build_attribute_constraints` helper and hoist the duplicated
`_AttributeType`/`_ObjectType`/`_ConstraintType` aliases to module scope.
- Restore correct (separate) LinkOrElse instances in the template property
definitions; shared Property descriptors break serialization-path assignment.
- validate_type: raise ValueError instead of bare Exception.
- Cover PvA __iter__ explicitly after switching next(iter(...)) reads to [].
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment threadsrc/citrine/_utils/functions.py
Comment threadtests/resources/test_table_config.py
Comment threadtests/resources/test_team.py
Comment threadtests/serialization/test_dimensions.py
@anoto-moniz

Copy link
Copy Markdown
Collaborator

@kroenlein With the exception of #1061 (comment), this looks great! Once you get that squared away, I'll give you a stamp, and update my workflow to use uv ruff.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kroenlein@anoto-moniz@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Apply ruff formatting and safe lint fixes - #1061

Open
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting
Open

Apply ruff formatting and safe lint fixes#1061
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting

Conversation

@kroenlein

@kroenleinkroenlein commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

The only purpose of the PR is running all package lines through ruff so that future formatting issues do not distract from code changes.

PR Type:

  • Breaking change (fix or feature that would cause existing functionality to change)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Maintenance (non-breaking change to assist developers)

Adherence to team decisions

  • I have added tests for 100% coverage
  • I have written Numpy-style docstrings for every method and class.
  • I have communicated the downstream consequences of the PR to others.
  • I have bumped the version in __version__.py

kroenleinand others added 2 commits August 6, 2026 09:09
…igial-test-fields
[v5.0] Remove vestigial experimental fields from test fixture
Ran `ruff format` and `ruff check --fix` (safe fixes only, line-length 99)
over all Python files in src/ and tests/.
Resolved conflicts with the project's flake8 configuration:
- Disabled RUF100 during the fix so noqa comments flake8 relies on
(D-codes, E501, W505) are preserved.
- Hand-wrapped 8 f-strings that exceeded 99 chars after .format() -> f-string
conversion.
- Added E203 to the flake8 ignore list (standard ruff/black slice-spacing
exception).
Fixed two autofixes that would have broken the test suite:
- Restored the load-bearing import order in tests/utils/fakes/__init__.py
(marked # isort: skip_file) to avoid a circular import.
- Restored the pytest fixture import in tests/serialization/test_scorers.py
(marked # noqa: F401).
flake8 is clean and all 1237 tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@kroenlein
kroenlein marked this pull request as ready for review August 7, 2026 02:36
@kroenlein
kroenlein requested a review from a team as a code ownerAugust 7, 2026 02:36
Base automatically changed from release/5.0 to mainAugust 7, 2026 15:19
Comment threadtests/_util/test_functions.py Fixed
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Comment threadsrc/citrine/gemtables/variables.py Outdated
Comment threadsrc/citrine/informatics/design_spaces/subspace.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/predictor_evaluation_result.py Outdated
Comment threadsrc/citrine/resources/ingestion.py Outdated
Comment threadsrc/citrine/resources/ingestion.py
Comment on lines +76 to +89
properties = Optional(
List(
Union(
[
LinkOrElse(GEMDPropertyTemplate),
SpecifiedMixedList(
[LinkOrElse(GEMDPropertyTemplate), Optional(Object(BaseBounds))]
),
]
)
),
"properties",
override=True,
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oof. I hate this. However, it's more an expression of how messy the definition of the serde stuff is generally, laid bare by the complication of the type itself. So not sure there's anything to be done. Ugh.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created an alias for LinkOrElse(GEMDPropertyTemplate) and swapped the Union to a |. I think it's more legible.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the change you described made it into the commit? At least, I don't see it above.

| LinkByUID
| Sequence[PropertyTemplate | LinkByUID | BaseBounds | None]
]
| None = None,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I continue to think multi-line type definitions in the middle of a function definition are the work of the devil. But I'm not sure a super long line is much better...

Comment threadtests/_serialization/test_container_properties.py Outdated
Comment threadtests/gemd_query/test_gemd_query.py Outdated
Comment threadtests/resources/test_branch.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_table_config.py Outdated
Comment threadtests/resources/test_templates.py Outdated
Comment threadtests/test_citrine.py Outdated
Comment threadtests/test_session.py Outdated
Follow-up to the ruff-formatting pass, addressing Austin's review feedback
and applying the same fixes to unflagged instances of each concern type.
- Add [tool.ruff] config: skip-magic-trailing-comma (collapses single-line
collections instead of exploding them) with isort.split-on-trailing-comma
disabled for compatibility.
- Convert .format() calls on string literals to f-strings.
- Drop orphaned `# pragma: no cover` comments left after `pass` removal.
- Refactor split-operand/wrapped asserts to keep operands together (extract
locals, loop over cases, lambda accessors) and move comments that forced
line wraps above their expressions.
- gemtables/variables.py: extract the repeated ternary into a module-level
`_build_attribute_constraints` helper and hoist the duplicated
`_AttributeType`/`_ObjectType`/`_ConstraintType` aliases to module scope.
- Restore correct (separate) LinkOrElse instances in the template property
definitions; shared Property descriptors break serialization-path assignment.
- validate_type: raise ValueError instead of bare Exception.
- Cover PvA __iter__ explicitly after switching next(iter(...)) reads to [].
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment threadsrc/citrine/_utils/functions.py
Comment threadtests/resources/test_table_config.py
Comment threadtests/resources/test_team.py
Comment threadtests/serialization/test_dimensions.py
@anoto-moniz

Copy link
Copy Markdown
Collaborator

@kroenlein With the exception of #1061 (comment), this looks great! Once you get that squared away, I'll give you a stamp, and update my workflow to use uv ruff.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kroenlein@anoto-moniz@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Apply ruff formatting and safe lint fixes - #1061

Open
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting
Open

Apply ruff formatting and safe lint fixes#1061
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting

Conversation

@kroenlein

@kroenleinkroenlein commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

The only purpose of the PR is running all package lines through ruff so that future formatting issues do not distract from code changes.

PR Type:

  • Breaking change (fix or feature that would cause existing functionality to change)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Maintenance (non-breaking change to assist developers)

Adherence to team decisions

  • I have added tests for 100% coverage
  • I have written Numpy-style docstrings for every method and class.
  • I have communicated the downstream consequences of the PR to others.
  • I have bumped the version in __version__.py

kroenleinand others added 2 commits August 6, 2026 09:09
…igial-test-fields
[v5.0] Remove vestigial experimental fields from test fixture
Ran `ruff format` and `ruff check --fix` (safe fixes only, line-length 99)
over all Python files in src/ and tests/.
Resolved conflicts with the project's flake8 configuration:
- Disabled RUF100 during the fix so noqa comments flake8 relies on
(D-codes, E501, W505) are preserved.
- Hand-wrapped 8 f-strings that exceeded 99 chars after .format() -> f-string
conversion.
- Added E203 to the flake8 ignore list (standard ruff/black slice-spacing
exception).
Fixed two autofixes that would have broken the test suite:
- Restored the load-bearing import order in tests/utils/fakes/__init__.py
(marked # isort: skip_file) to avoid a circular import.
- Restored the pytest fixture import in tests/serialization/test_scorers.py
(marked # noqa: F401).
flake8 is clean and all 1237 tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@kroenlein
kroenlein marked this pull request as ready for review August 7, 2026 02:36
@kroenlein
kroenlein requested a review from a team as a code ownerAugust 7, 2026 02:36
Base automatically changed from release/5.0 to mainAugust 7, 2026 15:19
Comment threadtests/_util/test_functions.py Fixed
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Comment threadsrc/citrine/gemtables/variables.py Outdated
Comment threadsrc/citrine/informatics/design_spaces/subspace.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/predictor_evaluation_result.py Outdated
Comment threadsrc/citrine/resources/ingestion.py Outdated
Comment threadsrc/citrine/resources/ingestion.py
Comment on lines +76 to +89
properties = Optional(
List(
Union(
[
LinkOrElse(GEMDPropertyTemplate),
SpecifiedMixedList(
[LinkOrElse(GEMDPropertyTemplate), Optional(Object(BaseBounds))]
),
]
)
),
"properties",
override=True,
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oof. I hate this. However, it's more an expression of how messy the definition of the serde stuff is generally, laid bare by the complication of the type itself. So not sure there's anything to be done. Ugh.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created an alias for LinkOrElse(GEMDPropertyTemplate) and swapped the Union to a |. I think it's more legible.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the change you described made it into the commit? At least, I don't see it above.

| LinkByUID
| Sequence[PropertyTemplate | LinkByUID | BaseBounds | None]
]
| None = None,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I continue to think multi-line type definitions in the middle of a function definition are the work of the devil. But I'm not sure a super long line is much better...

Comment threadtests/_serialization/test_container_properties.py Outdated
Comment threadtests/gemd_query/test_gemd_query.py Outdated
Comment threadtests/resources/test_branch.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_table_config.py Outdated
Comment threadtests/resources/test_templates.py Outdated
Comment threadtests/test_citrine.py Outdated
Comment threadtests/test_session.py Outdated
Follow-up to the ruff-formatting pass, addressing Austin's review feedback
and applying the same fixes to unflagged instances of each concern type.
- Add [tool.ruff] config: skip-magic-trailing-comma (collapses single-line
collections instead of exploding them) with isort.split-on-trailing-comma
disabled for compatibility.
- Convert .format() calls on string literals to f-strings.
- Drop orphaned `# pragma: no cover` comments left after `pass` removal.
- Refactor split-operand/wrapped asserts to keep operands together (extract
locals, loop over cases, lambda accessors) and move comments that forced
line wraps above their expressions.
- gemtables/variables.py: extract the repeated ternary into a module-level
`_build_attribute_constraints` helper and hoist the duplicated
`_AttributeType`/`_ObjectType`/`_ConstraintType` aliases to module scope.
- Restore correct (separate) LinkOrElse instances in the template property
definitions; shared Property descriptors break serialization-path assignment.
- validate_type: raise ValueError instead of bare Exception.
- Cover PvA __iter__ explicitly after switching next(iter(...)) reads to [].
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment threadsrc/citrine/_utils/functions.py
Comment threadtests/resources/test_table_config.py
Comment threadtests/resources/test_team.py
Comment threadtests/serialization/test_dimensions.py
@anoto-moniz

Copy link
Copy Markdown
Collaborator

@kroenlein With the exception of #1061 (comment), this looks great! Once you get that squared away, I'll give you a stamp, and update my workflow to use uv ruff.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kroenlein@anoto-moniz@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Apply ruff formatting and safe lint fixes - #1061

Open
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting
Open

Apply ruff formatting and safe lint fixes#1061
kroenlein wants to merge 5 commits into
mainfrom
maintain/ruff-formatting

Conversation

@kroenlein

@kroenleinkroenlein commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

The only purpose of the PR is running all package lines through ruff so that future formatting issues do not distract from code changes.

PR Type:

  • Breaking change (fix or feature that would cause existing functionality to change)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Maintenance (non-breaking change to assist developers)

Adherence to team decisions

  • I have added tests for 100% coverage
  • I have written Numpy-style docstrings for every method and class.
  • I have communicated the downstream consequences of the PR to others.
  • I have bumped the version in __version__.py

kroenleinand others added 2 commits August 6, 2026 09:09
…igial-test-fields
[v5.0] Remove vestigial experimental fields from test fixture
Ran `ruff format` and `ruff check --fix` (safe fixes only, line-length 99)
over all Python files in src/ and tests/.
Resolved conflicts with the project's flake8 configuration:
- Disabled RUF100 during the fix so noqa comments flake8 relies on
(D-codes, E501, W505) are preserved.
- Hand-wrapped 8 f-strings that exceeded 99 chars after .format() -> f-string
conversion.
- Added E203 to the flake8 ignore list (standard ruff/black slice-spacing
exception).
Fixed two autofixes that would have broken the test suite:
- Restored the load-bearing import order in tests/utils/fakes/__init__.py
(marked # isort: skip_file) to avoid a circular import.
- Restored the pytest fixture import in tests/serialization/test_scorers.py
(marked # noqa: F401).
flake8 is clean and all 1237 tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@kroenlein
kroenlein marked this pull request as ready for review August 7, 2026 02:36
@kroenlein
kroenlein requested a review from a team as a code ownerAugust 7, 2026 02:36
Base automatically changed from release/5.0 to mainAugust 7, 2026 15:19
Comment threadtests/_util/test_functions.py Fixed
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Comment threadsrc/citrine/gemtables/variables.py Outdated
Comment threadsrc/citrine/informatics/design_spaces/subspace.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/design_candidate.py Outdated
Comment threadsrc/citrine/informatics/predictor_evaluation_result.py Outdated
Comment threadsrc/citrine/resources/ingestion.py Outdated
Comment threadsrc/citrine/resources/ingestion.py
Comment on lines +76 to +89
properties = Optional(
List(
Union(
[
LinkOrElse(GEMDPropertyTemplate),
SpecifiedMixedList(
[LinkOrElse(GEMDPropertyTemplate), Optional(Object(BaseBounds))]
),
]
)
),
"properties",
override=True,
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oof. I hate this. However, it's more an expression of how messy the definition of the serde stuff is generally, laid bare by the complication of the type itself. So not sure there's anything to be done. Ugh.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created an alias for LinkOrElse(GEMDPropertyTemplate) and swapped the Union to a |. I think it's more legible.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the change you described made it into the commit? At least, I don't see it above.

| LinkByUID
| Sequence[PropertyTemplate | LinkByUID | BaseBounds | None]
]
| None = None,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I continue to think multi-line type definitions in the middle of a function definition are the work of the devil. But I'm not sure a super long line is much better...

Comment threadtests/_serialization/test_container_properties.py Outdated
Comment threadtests/gemd_query/test_gemd_query.py Outdated
Comment threadtests/resources/test_branch.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_gemd_resource.py Outdated
Comment threadtests/resources/test_table_config.py Outdated
Comment threadtests/resources/test_templates.py Outdated
Comment threadtests/test_citrine.py Outdated
Comment threadtests/test_session.py Outdated
Follow-up to the ruff-formatting pass, addressing Austin's review feedback
and applying the same fixes to unflagged instances of each concern type.
- Add [tool.ruff] config: skip-magic-trailing-comma (collapses single-line
collections instead of exploding them) with isort.split-on-trailing-comma
disabled for compatibility.
- Convert .format() calls on string literals to f-strings.
- Drop orphaned `# pragma: no cover` comments left after `pass` removal.
- Refactor split-operand/wrapped asserts to keep operands together (extract
locals, loop over cases, lambda accessors) and move comments that forced
line wraps above their expressions.
- gemtables/variables.py: extract the repeated ternary into a module-level
`_build_attribute_constraints` helper and hoist the duplicated
`_AttributeType`/`_ObjectType`/`_ConstraintType` aliases to module scope.
- Restore correct (separate) LinkOrElse instances in the template property
definitions; shared Property descriptors break serialization-path assignment.
- validate_type: raise ValueError instead of bare Exception.
- Cover PvA __iter__ explicitly after switching next(iter(...)) reads to [].
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment threadsrc/citrine/_utils/functions.py
Comment threadtests/resources/test_table_config.py
Comment threadtests/resources/test_team.py
Comment threadtests/serialization/test_dimensions.py
@anoto-moniz

Copy link
Copy Markdown
Collaborator

@kroenlein With the exception of #1061 (comment), this looks great! Once you get that squared away, I'll give you a stamp, and update my workflow to use uv ruff.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kroenlein@anoto-moniz@github-advanced-security