Skip to content

v0.32.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 14:45
· 46 commits to main since this release

Breaking

  • Input values of the wrong type are treated as missing. A bin, site number or test value
    that is not a number, or a pass/fail verdict that is not true/false, is left out of the
    die — the same rule as a value outside the STDF V4 ranges — and still reported as
    input-values-not-numbers. A die whose only bin was text therefore has no verdict rather
    than a fail, which can change yield for such input. The input objects are not modified.
  • Test values on dies from buildWaferMap are read-only snapshots. A map holds test values and
    verdicts as one column per test. die.testValues and die.testPass on a built die build a frozen
    object from those columns on each read, keeping nothing on the die, so die.testValues !== die.testValues. Assigning to either field throws a TypeError; changing a key of the frozen
    object throws in strict-mode code and is ignored otherwise. Pass the values to buildWaferMap,
    or copy the die with your own object ({ ...die, testValues: mine }). A spread, structuredClone or JSON.stringify of a built die
    gives plain objects with the same values. A die no longer shares the input record's
    testValues/testPass objects, so changing the input after the build does not change the map.
    Dies a host builds itself keep ordinary objects.
  • Pre-built dies get the same input checks as results. Wrong-type and out-of-range
    values are treated as missing, and a die whose coordinates STDF cannot store is kept as an
    unpositioned die.
  • WaferMapResult.view is removed. It was marked @internal: the renderers build their own
    draw list whenever they draw, so a result no longer carries one. Read the result's own fields
    (plotMode, metadata, isLotStack, hbinDefs, sbinDefs, testDefs). This makes each
    result smaller (about 86 bytes less per die) and roughly halves the copy the Web Worker makes of
    a result. The internal dataAxisFlip field takes its place.

Changed

  • The legend filters to several bins or metadata values at once. Ctrl/Cmd+click on a legend
    entry — the map's legend or the gallery's strip, where Ctrl/Cmd+Enter/Space works from the
    keyboard — adds or removes a value; a plain click shows only that value, or clears the
    filter when it is the only one shown. highlightBin accepts number | number[] and
    highlightMetadataValue accepts string | string[].
  • A finding and the legend filter agree. Clicking a finding about a bin filters the legend
    to that bin, and one about yield or a test clears the filter — in a single map and in the
    gallery alike. Changing the legend filter releases the finding, as changing the selection
    does, including a selection made on a gallery card while a lot finding is active.
  • Lot regional findings are tested on all wafers' data together. A yield, bin,
    functional pass-rate, limit-fail or test-value difference in a region is combined across
    every wafer (Stouffer's Z over each wafer's own test, weighted by die count) and reported
    with the wafer analysis's gates, redundancy collapse and opposite-region re-test, instead of
    by counting wafers whose own analysis reported it — a pattern present on every wafer but
    too faint on some to pass alone is the lot's pattern. The sentence gives the lot's figure
    and "higher/lower on N/M wafers, all wafers' data combined", N counting the wafers whose
    region differs in that direction; stats.method is 'stouffer-z'. Clusters, edge arcs and
    spatial-pattern labels are still counted by the wafers that report them. Lot findings keep
    absorbed restatements in the list, marked by absorbedIds, as wafer findings do.
  • Selected dies are shown by fading the rest of the map. Every unselected die is faded
    towards the map background and the selection is outlined, so selected dies keep their full
    colour and it is clear which dies are selected whatever the selection's shape — a block, a
    ring, an edge arc. A finding highlighted from the Summary panel, a gallery lot finding and
    setSelection are drawn the same way. The fade and outline sit under the axes and legend.
  • A map opens in select mode. A drag draws a selection box; hold Space and drag, use the
    arrow keys, or choose Pan in the toolbar to pan.
  • Clicking the only selected die again clears the selection. Clicking a die inside a
    larger selection still selects just that die.
  • Changing the selection on the map releases an active finding. A click, box select,
    right-click, Esc or clearSelection clears the Summary panel's active finding and its bin
    highlight, so the panel never shows a finding the map no longer highlights.

Fixed

  • Regional findings report patterns confined to one region. A bin, limit-fail or
    functional-fail rate that is zero in the rest of the wafer and raised in a region (a bin
    found only at the edge) counts as the largest relative change for the effect gate and for
    severity, for every region family: rings, quadrants, sectors, reticle positions and test
    sites. On a lot whose wafers carry bin 2 only at the edge, the lot finding reads "seen on
    8/8 wafers".
  • Yield and functional pass-rate findings are judged by their failure rate. The relative
    effect of a pass rate is measured on its failures: yield 98% → 94% is failures 2% → 6%, and
    reaches the same verdict as the bin rate of the same dies.
  • A region is not reported as deviating only because another region deviates more. A
    finding opposite in direction to a stronger finding for the same variable and region family
    must still hold when compared with the rest of the wafer without that region, so an edge
    rich in a bin, a limit fail or high test values no longer makes the inner rings read as low
    in it (or high in yield).
  • The soft bin that restates yield is absorbed into the yield finding, as the hard pass bin
    is: the one soft bin every passing die carries and no failing die does.
  • An edge ring made of scattered fails is classified as an edge ring. The spatial-pattern
    classifier recognises an edge ring from the failing dies' positions — most fails at the rim
    and spread round at least 60% of it — when no connected group of fails is large enough to
    judge shape by, and before the scratch rule, so a short run along the rim is not a scratch.
    Against WM-811K: detection 86.4%, edge-ring recall 75% (precision 92%), scratch recall 24%.
  • Lot spatial-pattern rows count related labels together and state the lot's figures.
    Edge-ring and edge-local wafers count as one edge pattern, and centre and donut as one,
    naming each label's wafer count ("Spatial pattern: edge (edge-ring on 5, edge-local on 2) —
    seen on 7/13 wafers"); the sentence gives the lot's count, not any one wafer's confidence or figures.
    The gallery highlights each counted wafer's failing dies.
  • Findings, their severities and "seen on N wafers" counts can change.

Performance

  • Insights no longer blocks while its test statistics are computed. The Overview's Test Values
    table is built in slices, showing "Computing test statistics…" until it is ready, and when the
    gallery's summary panel is computing the same statistics at the time, the two share the one
    calculation instead of each doing it.
  • Gallery cards are drawn only when on screen. A card below the fold keeps its map up to date
    and is drawn as it scrolls into view. Printing and the gallery PNG draw every card first, so
    both still show the whole gallery. On a 25-wafer, 266k-die lot, with 4 cards on screen:
    switching to value mode takes 0.4 s in Chrome (was 1.1 s) and 0.5 s in WebKit (was 2.0 s);
    the gallery opens in 1.8 s and 2.0 s.
  • The gallery draws about twice as fast in WebKit (the desktop app on Linux and macOS, and
    Safari). Die fills and outlines are drawn as many small canvas paths rather than one per
    colour, which WebKit rasterises far faster. On a 25-wafer, 266k-die lot the gallery opens in
    4.0 s (was 7.0 s) and a switch to value or stacked mode takes 1.8–2.3 s (was 3.8–4.4 s).
    Chrome draws identical pixels; in WebKit only anti-aliased edge pixels differ.
  • The lot Summary report opens about five times faster on a large lot. Its Test Values table
    finds each test's minimum, mean and maximum in one pass instead of sorting every die's value.
    On a 25-wafer, 266k-die lot the "Summary report" button takes 0.4 s in Chrome (was 6.0 s) and
    0.9 s from click to report in WebKit (was 4.7 s). The report is unchanged (compared as HTML).
    Boxplot quartiles and the histogram's outlier range are found the same way as the Summary
    panel's, by selection, with the same figures.
  • Test-value analysis (enableTestValueAnalysis) is two to three times faster on large lots.
    Spec-limit findings count each region's dies in one pass instead of re-reading every die for
    every region, the test list is read column by column, and per-test statistics find their
    quartiles by selection. Findings are unchanged (compared byte for byte on a 266k-die lot with
    5,289 findings). On that lot: 18.9 s → 7.2 s in Chrome, 25.6 s → 10.7 s in WebKit.
  • Analysis is about a third faster in Chrome on large lots. Merging findings in adjacent
    regions, pairing hard and soft bins that cover the same dies, and assigning dies to regions
    now compare die positions as numbers rather than as a text key per die. Findings are
    unchanged (compared byte for byte on a 266k-die lot). On that lot, load-time analysis takes
    2.5 s in Chrome (was 3.7 s).
  • Stacked modes and mode switches in the gallery are faster. Stacked cards key die positions by
    number rather than by a string per die, and a map no longer rebuilds a key for every die on
    each redraw unless dies are selected. On a 25-wafer, 266k-die lot in Chrome: switching to
    stacked bins 2.0 s → 1.6 s, to value mode 1.3 s → 1.1 s.
  • The lot summary panel's test statistics are computed about three times faster. The
    quartiles of each test's pooled values are found by selection instead of sorting every value
    (the same order statistics, so the same figures). On a 25-wafer, 266k-die lot the gallery
    with its panel opens in 3.1 s in Chrome (was 3.9 s) and about 3.5 s in WebKit (was 4.0 s).
  • Insights opens several times faster on a large lot (25 wafers, 266k dies: the Overview
    2.7 s → 0.65 s in Chrome, 0.9 s in WebKit). The Overview's Test Values table reuses the
    pooled statistics the gallery's summary panel has already computed, whether or not the lot
    has functional tests, and the pass-rate chart reads each die's values and recorded verdicts
    in one pass per die.
    Figures are unchanged.
  • analyzeWaferMap is about five times faster on large wafers (a 25-wafer, 266k-die lot:
    32 s → 6.5 s in Chrome). Region membership, die keys and cluster neighbour lookups are each
    computed once per analysis, not once per finding builder. Findings are unchanged.
  • Faster building and analysis in WebKit (the desktop app on Linux and macOS, and Safari).
    Checks that asked whether a die holds any test data read the die's keys one at a time and stop
    at the first; the coverage count checks bins before test data; input checking decides each
    test number's legality once per wafer instead of once per die. On a 266k-die lot in WebKitGTK,
    building fell from 2.5 s to 1.1 s and analysis from 14 s to 7 s. Results are unchanged.
  • A hidden Summary panel is rendered when it is opened, not on every mount and option
    change. Every gallery card has one, so a large gallery mounts faster (266k-die lot: 7.3 s →
    5.0 s) and switches plot mode faster (3.4 s → 1.4 s).
  • Test values are held as one column per test, not as an object on each die, so a map
    holds a small fraction of the memory it did: on a 266k-die, 51-test lot in Chrome, about 330 MB
    where it was 1.1 GB. A result from createWafermapWorker moves its columns to the page without
    copying them.
  • Die outlines are drawn as merged lines, one per run of shared edges instead of four sides
    per die. Galleries draw 10–17% faster in WebKit (the desktop app on Linux), where stroking each
    die was most of the drawing time. Every outline is now the same weight in every browser: Chrome
    drew the edge two dies share slightly darker than the wafer's outer edge, WebKit did not.

Added

  • HighlightWaferTarget.dieKeysByWafer — a lot regional finding names its region's dies
    on each counted wafer, keyed by wafer index; the gallery highlights the region on every
    counted card from it.

  • results can be columns (DieColumns). A host that already holds its results as columns
    (a parser, Arrow, Parquet) passes one array per field and, for test values and verdicts, the
    indices of the records that have one with their values. The map is built with no object per
    record or die. Retests, derived tests, input checks and warnings behave exactly as for rows.
    Missing entries are NaN or STDF's missing values (−32768 for coordinates, 65535 for bins and
    sites). Mismatched lengths or out-of-range and repeated indices throw.


npm: @wafertools/wafermap@0.32.0 ·
Upgrading ·
What's New ·
Full changelog