Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vision Data Explorer Image Explorer Tests #2188

Merged
merged 46 commits into from
Aug 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
ffaf951
ckpt
Advitya17 Jul 20, 2023
2efd461
test ckpt
Advitya17 Jul 20, 2023
345d3bb
constant button test ckpt
Advitya17 Jul 21, 2023
c326fb6
merge conflict fixes
Advitya17 Jul 21, 2023
4ba30d6
test ckpt
Advitya17 Jul 24, 2023
0bd2f1e
image explorer test ckpt
Advitya17 Jul 24, 2023
66f5fb2
merge conflict fix
Advitya17 Jul 24, 2023
ec3815a
readding constants
Advitya17 Jul 24, 2023
530c630
test fixes
Advitya17 Jul 24, 2023
88282ac
Merge branch 'main' of https://github.com/microsoft/responsible-ai-to…
Advitya17 Jul 24, 2023
594835f
line limit fix
Advitya17 Jul 25, 2023
f83688c
python lint fixes
Advitya17 Jul 25, 2023
c657628
added flyout constants
Advitya17 Jul 25, 2023
2dd58e2
reverted flyout test
Advitya17 Jul 25, 2023
2960f82
auto lint fixes
Advitya17 Jul 25, 2023
7d5e965
cv2 installation tweak
Advitya17 Jul 27, 2023
ebc3a3a
removed cv2 dependency from vision
Advitya17 Jul 27, 2023
c8ecca0
Merge branch 'main' of https://github.com/microsoft/responsible-ai-to…
Advitya17 Jul 27, 2023
5393358
cv2 for image shap exp
Advitya17 Jul 27, 2023
a6e582e
additional tests
Advitya17 Jul 27, 2023
2cb3510
auto lint fixes
Advitya17 Jul 27, 2023
62f1255
merge conflict fix
Advitya17 Jul 27, 2023
c2fc431
constant & test updates
Advitya17 Jul 28, 2023
f2e86c7
arg fix
Advitya17 Jul 28, 2023
3afb832
removed unused import
Advitya17 Jul 28, 2023
2ae1d58
Merge branch 'main' into agemawat/vision_de_tests
Advitya17 Jul 31, 2023
c3282b9
test update
Advitya17 Jul 31, 2023
d5bead9
test cleanup
Advitya17 Jul 31, 2023
5b0eca8
Merge branch 'main' of https://github.com/microsoft/responsible-ai-to…
Advitya17 Jul 31, 2023
f79c1df
auto lint fixes
Advitya17 Jul 31, 2023
eeace9f
test ckpt
Advitya17 Jul 31, 2023
6c965b2
lint & constant fixes
Advitya17 Jul 31, 2023
76ed8ec
test fix
Advitya17 Jul 31, 2023
ce24ac9
test exp
Advitya17 Aug 1, 2023
d75083d
Merge branch 'main' of https://github.com/microsoft/responsible-ai-to…
Advitya17 Aug 1, 2023
5318e2d
dynamic inference test
Advitya17 Aug 1, 2023
fe93e36
test fix
Advitya17 Aug 1, 2023
0747816
package update
Advitya17 Aug 1, 2023
d121077
test fix
Advitya17 Aug 1, 2023
d1cbe30
constant fix
Advitya17 Aug 1, 2023
d2b6a22
merge conflict fix
Advitya17 Aug 11, 2023
856aaaf
comment fixes
Advitya17 Aug 11, 2023
9f85a61
build fix
Advitya17 Aug 11, 2023
4832a1a
lint fixes
Advitya17 Aug 11, 2023
fe593b1
Merge branch 'main' into agemawat/vision_de_tests
Advitya17 Aug 14, 2023
0327f91
Merge branch 'main' into agemawat/vision_de_tests
Advitya17 Aug 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion libs/e2e/src/lib/describer/modelAssessment/Constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -185,12 +185,24 @@ export enum Locators {
VisionDataExplorerImageExplorerViewButton = "#VisionDataExplorer button[name='Image explorer view']",
VisionDataExplorerTableViewButton = "#VisionDataExplorer button[name='Table view']",
VisionDataExplorerClassViewButton = "#VisionDataExplorer button[name='Class view']",
VisionDataExplorerPredictedLabel = "#VisionDataExplorer #predictedLabel",
VisionDataExplorerLegendFailure = "#VisionDataExplorer #legendFailure",
VisionDataExplorerLegendSuccess = "#VisionDataExplorer #legendSuccess",
VisionDataExplorerImageExplorerViewErrorInstances = "#VisionDataExplorer #errorInstances",
VisionDataExplorerImageExplorerViewErrorInstanceCount = "#VisionDataExplorer #errorInstances #instanceCount",
VisionDataExplorerImageExplorerViewSuccessInstances = "#VisionDataExplorer #successInstances",
VisionDataExplorerImageExplorerViewSuccessInstanceCount = "#VisionDataExplorer #successInstances #instanceCount",
VisionDataExplorerImageExplorerViewErrorImageContainer = "#VisionDataExplorer #errorImageContainer",
VisionDataExplorerImageExplorerViewSuccessImageContainer = "#VisionDataExplorer #successImageContainer",
VisionDataExplorerTabsViewTableList = "#VisionDataExplorer #tabsViewTableList",
VisionDataExplorerTabsViewItemsSelectedStatement = "#VisionDataExplorer #itemsSelectedStatement",
VisionDataExplorerTabsViewSaveCohortButton = "#VisionDataExplorer #saveCohortButton",
VisionDataExplorerPageSizeSelector = "#VisionDataExplorer #pageSizeSelector",
VisionDataExplorerClassViewLabelTypeDropdown = "#VisionDataExplorer #labelTypeDropdown",
VisionDataExplorerClassViewLabelDisplayDropdown = "#VisionDataExplorer #labelVisibilitySelectorsDropdown",
VisionDataExplorerClassViewDataCharacteristicsLegend = "#VisionDataExplorer #dataCharacteristicsLegend",
VisionDataExplorerClassViewContainer = "#VisionDataExplorer #classViewContainer"
VisionDataExplorerClassViewContainer = "#VisionDataExplorer #classViewContainer",
VisionDataExplorerImageExplorerViewImage = "#VisionDataExplorer #visionImage_0",
VisionDataExplorerImageExplorerViewImagePredictedY = "#VisionDataExplorer #predictedY_0",
VisionDataExplorerImageExplorerViewImageTrueY = "#VisionDataExplorer #trueY_0"
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,13 @@ import { IModelAssessmentData } from "../IModelAssessmentData";

import { ensureAllVisionDataExplorerBasicElementsArePresent } from "./ensureAllVisionDataExplorerBasicElementsArePresent";
import { ensureAllVisionDataExplorerClassViewElementsAfterSelectionArePresent } from "./ensureAllVisionDataExplorerClassViewElementsAfterSelectionArePresent";
import { ensureAllVisionDataExplorerImageExplorerViewElementsAfterSelectionArePresent } from "./ensureAllVisionDataExplorerImageExplorerViewElementsAfterSelectionArePresent";
import { ensureAllVisionDataExplorerTableViewElementsAfterSelectionArePresent } from "./ensureAllVisionDataExplorerTableViewElementsAfterSelectionArePresent";
import {
ensureAllVisionDataExplorerClassViewElementsBeforeSelectionAreNotPresent,
ensureAllVisionDataExplorerImageExplorerViewElementsBeforeSelectionAreNotPresent,
ensureAllVisionDataExplorerTableViewElementsBeforeSelectionAreNotPresent
} from "./ensureAllVisionDataExplorerViewElementsBeforeSelectionAreNotPresent";

const testName = "Vision Data Explorer";

Expand All @@ -33,12 +39,23 @@ export function describeVisionDataExplorer(
ensureAllVisionDataExplorerBasicElementsArePresent();
});

it("should show Image explorer view components when selected", () => {
ensureAllVisionDataExplorerImageExplorerViewElementsAfterSelectionArePresent();
ensureAllVisionDataExplorerTableViewElementsBeforeSelectionAreNotPresent();
ensureAllVisionDataExplorerClassViewElementsBeforeSelectionAreNotPresent();
cy.get(Locators.VisionDataExplorerPageSizeSelector).should("not.exist");
});

it("should show Table view components when selected", () => {
ensureAllVisionDataExplorerTableViewElementsAfterSelectionArePresent();
ensureAllVisionDataExplorerImageExplorerViewElementsBeforeSelectionAreNotPresent();
ensureAllVisionDataExplorerClassViewElementsBeforeSelectionAreNotPresent();
});

it("should show Class view components when selected", () => {
ensureAllVisionDataExplorerClassViewElementsAfterSelectionArePresent();
ensureAllVisionDataExplorerImageExplorerViewElementsBeforeSelectionAreNotPresent();
ensureAllVisionDataExplorerTableViewElementsBeforeSelectionAreNotPresent();
});
} else {
it("should not have 'VisionDataExplorer' component", () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

import { Locators } from "../Constants";

export function ensureAllVisionDataExplorerImageExplorerViewElementsAfterSelectionArePresent(): void {
cy.get(Locators.VisionDataExplorerImageExplorerViewButton).click();

cy.get(Locators.VisionDataExplorerPredictedLabel).should("exist");
cy.get(Locators.VisionDataExplorerLegendFailure).should("exist");
cy.get(Locators.VisionDataExplorerLegendSuccess).should("exist");

cy.get(Locators.VisionDataExplorerImageExplorerViewErrorInstances).should(
"include.text",
"Error instances"
);
cy.get(Locators.VisionDataExplorerImageExplorerViewSuccessInstances).should(
"include.text",
"Success instances"
);

cy.get(
Locators.VisionDataExplorerImageExplorerViewErrorImageContainer
).should("exist");
cy.get(
Locators.VisionDataExplorerImageExplorerViewSuccessImageContainer
).should("exist");

cy.get(Locators.VisionDataExplorerImageExplorerViewImage).should("exist");
cy.get(Locators.VisionDataExplorerImageExplorerViewImagePredictedY).should(
"exist"
);
cy.get(Locators.VisionDataExplorerImageExplorerViewImageTrueY).should(
"exist"
);

cy.get(Locators.VisionDataExplorerPageSizeSelector).should("not.exist");
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

import { Locators } from "../Constants";

export function ensureAllVisionDataExplorerImageExplorerViewElementsBeforeSelectionAreNotPresent(): void {
cy.get(Locators.VisionDataExplorerPredictedLabel).should("not.exist");
cy.get(Locators.VisionDataExplorerLegendFailure).should("not.exist");
cy.get(Locators.VisionDataExplorerLegendSuccess).should("not.exist");

cy.get(Locators.VisionDataExplorerImageExplorerViewErrorInstances).should(
"not.exist"
);
cy.get(Locators.VisionDataExplorerImageExplorerViewErrorInstances).should(
"not.exist"
);
cy.get(Locators.VisionDataExplorerImageExplorerViewErrorInstanceCount).should(
"not.exist"
);
cy.get(Locators.VisionDataExplorerImageExplorerViewSuccessInstances).should(
"not.exist"
);
cy.get(Locators.VisionDataExplorerImageExplorerViewSuccessInstances).should(
"not.exist"
);
cy.get(
Locators.VisionDataExplorerImageExplorerViewSuccessInstanceCount
).should("not.exist");

cy.get(
Locators.VisionDataExplorerImageExplorerViewErrorImageContainer
).should("not.exist");
cy.get(
Locators.VisionDataExplorerImageExplorerViewSuccessImageContainer
).should("not.exist");

cy.get(Locators.VisionDataExplorerImageExplorerViewImagePredictedY).should(
"not.exist"
);
cy.get(Locators.VisionDataExplorerImageExplorerViewImageTrueY).should(
"not.exist"
);
}

export function ensureAllVisionDataExplorerTableViewElementsBeforeSelectionAreNotPresent(): void {
cy.get(Locators.VisionDataExplorerTabsViewTableList).should("not.exist");

cy.get(Locators.VisionDataExplorerTabsViewItemsSelectedStatement).should(
"not.exist"
);
cy.get(Locators.VisionDataExplorerTabsViewSaveCohortButton).should(
"not.exist"
);
}

export function ensureAllVisionDataExplorerClassViewElementsBeforeSelectionAreNotPresent(): void {
cy.get(Locators.VisionDataExplorerClassViewLabelTypeDropdown).should(
"not.exist"
);
cy.get(Locators.VisionDataExplorerClassViewLabelDisplayDropdown).should(
"not.exist"
);

cy.get(Locators.VisionDataExplorerClassViewDataCharacteristicsLegend).should(
"not.exist"
);

cy.get(Locators.VisionDataExplorerClassViewDataCharacteristicsLegend).should(
"not.exist"
);
cy.get(Locators.VisionDataExplorerClassViewContainer).should("not.exist");
}
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ export class Flyout extends React.Component<IFlyoutProps, IFlyoutState> {
}
/>
</Stack.Item>
<Stack.Item>
<Stack.Item id="predictionTitle">
{predictedY !== trueY ? (
<Text
variant="large"
Expand Down Expand Up @@ -179,13 +179,13 @@ export class Flyout extends React.Component<IFlyoutProps, IFlyoutState> {
{item?.index}
</Text>
</Stack.Item>
<Stack.Item>
<Stack.Item id="predLabel">
<Text variant="large">
{localization.InterpretVision.Dashboard.predictedY}
{predictedY}
</Text>
</Stack.Item>
<Stack.Item>
<Stack.Item id="gtLabel">
<Text variant="large">
{localization.InterpretVision.Dashboard.trueY}
{trueY}
Expand All @@ -195,6 +195,7 @@ export class Flyout extends React.Component<IFlyoutProps, IFlyoutState> {
</Stack.Item>
<Stack.Item className={classNames.imageContainer}>
<Image
id={`flyoutImage_${item?.index}`}
src={`data:image/jpg;base64,${item?.image}`}
className={classNames.image}
imageFit={ImageFit.contain}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ export class ImageList extends React.Component<
<Image
{...imageProps}
alt={alt}
id={`visionImage_${item?.index}`}
src={`data:image/jpg;base64,${item?.image}`}
onClick={this.callbackWrapper(item)}
width={this.props.imageDim}
Expand All @@ -144,6 +145,7 @@ export class ImageList extends React.Component<
style={{
left: ImagePadding
}}
id={`predictedY_${item?.index}`}
>
<Text className={classNames.labelPredicted}>{predictedY}</Text>
</Stack.Item>
Expand All @@ -156,6 +158,7 @@ export class ImageList extends React.Component<
? this.props.imageDim
: this.props.imageDim - 1.35 * ImagePadding
}}
id={`trueY_${item?.index}`}
>
<Text
className={classNames.label}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,16 @@ export class TabsView extends React.Component<ITabsViewProps, ITabViewState> {
className={classNames.mainImageContainer}
>
<Stack className={classNames.halfContainer} tokens={stackTokens}>
<Stack.Item>
<Stack.Item id="errorInstances">
<TitleBar
count={this.props.errorInstances.length}
type={TitleBarOptions.Error}
/>
</Stack.Item>
<Stack.Item className={classNames.imageListContainer}>
<Stack.Item
className={classNames.imageListContainer}
id="errorImageContainer"
>
<ImageList
items={this.props.errorInstances}
imageDim={this.props.imageDim}
Expand All @@ -121,13 +124,16 @@ export class TabsView extends React.Component<ITabsViewProps, ITabViewState> {
</Stack.Item>
</Stack>
<Stack className={classNames.halfContainer} tokens={stackTokens}>
<Stack.Item>
<Stack.Item id="successInstances">
<TitleBar
count={this.props.successInstances.length}
type={TitleBarOptions.Success}
/>
</Stack.Item>
<Stack.Item className={classNames.imageListContainer}>
<Stack.Item
className={classNames.imageListContainer}
id="successImageContainer"
>
<ImageList
items={this.props.successInstances}
imageDim={this.props.imageDim}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export class TitleBar extends React.Component<ITitleBarProps, ITitleBarState> {
: localization.InterpretVision.Dashboard.titleBarSuccess}
</Text>
</Stack.Item>
<Stack.Item>
<Stack.Item id="instanceCount">
<Text variant="large" className={classNames.titleBarNumber}>
{this.props.count}
</Text>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,13 @@ export class VisionExplanationDashboardCommon extends React.Component<
tokens={{ childrenGap: "l1" }}
verticalAlign="center"
>
<Stack.Item>
<Stack.Item id="predictedLabel">
<Text>
{localization.InterpretVision.Dashboard.predictedLabel}
</Text>
</Stack.Item>
<Stack.Item
id="legendFailure"
className={mergeStyles(
this.props.imageStyles.errorIndicator,
this.props.classNames.legendIndicator
Expand All @@ -111,6 +112,7 @@ export class VisionExplanationDashboardCommon extends React.Component<
</Text>
</Stack.Item>
<Stack.Item
id="legendSuccess"
className={mergeStyles(
this.props.imageStyles.successIndicator,
this.props.classNames.legendIndicator
Expand Down
6 changes: 4 additions & 2 deletions notebooks/test_notebooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,8 +261,10 @@ def test_responsibleaidashboard_multiclass_dnn_model_debugging():
@pytest.mark.vision_notebooks
def test_responsibleaidashboard_fridge_image_classification_model_debugging():
nb_path = RESPONSIBLEAIDASHBOARD
nb_name = \
"responsibleaidashboard-fridge-image-classification-model-debugging"
nb_name = (
"responsibleaidashboard-fridge-"
"image-classification-model-debugging"
)

test_values = {}
assay_one_notebook(nb_path, nb_name, test_values)
Expand Down
Loading