') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Added doctests, exceptions, type hints, fixed bug, remove trailing whitespace for infix_to_prefix_conversion by hollowcrust · Pull Request #10063 · TheAlgorithms/Python · GitHub
Skip to content

Added doctests, exceptions, type hints, fixed bug, remove trailing whitespace for infix_to_prefix_conversion - #10063

Closed
hollowcrust wants to merge 0 commit into
TheAlgorithms:masterfrom
hollowcrust:patch-1
Closed

Added doctests, exceptions, type hints, fixed bug, remove trailing whitespace for infix_to_prefix_conversion#10063
hollowcrust wants to merge 0 commit into
TheAlgorithms:masterfrom
hollowcrust:patch-1

Conversation

@hollowcrust

@hollowcrusthollowcrust commented Oct 8, 2023

Copy link
Copy Markdown
Contributor

Describe your change:

Fixes#9943

File affected: data_structures/stacks/infix_to_prefix_conversion.py

  • Added doctests
  • Added exceptions for expressions with invalid bracket positions
  • Added type hints for functions
  • Edited code to ensure no trailing whitespaces in code and doctests
  • Fixed a bug on line 53 (original file) by adding a condition and stack[-1] != "("
  • Add an algorithm?
  • Fix a bug or typo in an existing algorithm?
  • Documentation change?

Checklist:

  • I have read CONTRIBUTING.md.
  • This pull request is all my own work -- I have not plagiarized.
  • I know that pull requests will not be merged if they fail the automated tests.
  • This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • All new Python files are placed inside an existing directory.
  • All filenames are in all lowercase characters with no spaces or dashes.
  • All functions and variable names follow Python naming conventions.
  • All function parameters and return values are annotated with Python type hints.
  • All functions have doctests that pass the automated testing.
  • All new algorithms include at least one URL that points to Wikipedia or another similar explanation.
  • If this pull request resolves one or more open issues then the description above includes the issue number(s) with a closing keyword: "Fixes #ISSUE-NUMBER".

@algorithms-keeperalgorithms-keeperBot added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed tests are failing Do not merge until tests pass and removed tests are failing Do not merge until tests pass labels Oct 8, 2023
@hollowcrusthollowcrust changed the title Added doctests, exceptions, type hints, fixed bug for infix_to_prefix_conversionAdded doctests, exceptions, type hints, fixed bug, remove trailing whitespace for infix_to_prefix_conversionOct 8, 2023
Comment threaddata_structures/stacks/infix_to_prefix_conversion.py Outdated


def infix_2_postfix(infix):
def infix_2_postfix(infix: str) -> str:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

BEFORE we modify this function we need it to have doctests. You can do that in a separate pull request and then we can circle back to this pull request AFTER the doctests have been merged.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'm reaching my PR limit so maybe I can commit changes directly here or can you help me review #10073 or #10012 first?

@cclausscclaussOct 8, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I merged one of them that adds tests. The other one deletes the work of others but perhaps it is the right thing to do.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

ok thanks i'll work on this

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@cclauss I added tests in #10095, you can help me look through.

@algorithms-keeperalgorithms-keeperBot added tests are failing Do not merge until tests pass and removed tests are failing Do not merge until tests pass labels Oct 8, 2023
@cclauss

cclauss commented Oct 10, 2023

Copy link
Copy Markdown
Member

Please rebase to fix to resolve the git conflict.

If you are unsure how to do that, please close this pull request and then create a new one.

@hollowcrust

Copy link
Copy Markdown
ContributorAuthor

@cclauss I created a new PR #10259, you can help me check it please.

@hollowcrust
hollowcrust deleted the patch-1 branch October 11, 2023 14:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting reviewsThis PR is ready to be reviewedenhancementThis PR modified some existing files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improve our test coverage

3 participants

@hollowcrust@cclauss@sanskark