From c622c9a14411c0ea58b8aa861b4f26503b6cdcbc Mon Sep 17 00:00:00 2001 From: Andy Grigg Date: Thu, 24 Apr 2025 19:21:12 -0400 Subject: [PATCH] Copy latest artifacts from build --- .../api/attribute-definitions.md | 20 +- .../api/attribute-values.md | 2 - .../api/database.md | 2 - .../api/helpers.md | 2 - .../api/record.md | 54 +++- .../api/session.md | 2 - .../api/supporting.md | 2 - .../api/table.md | 2 - .../changelog.md | 7 + .../docfx.json | 4 +- .../getting_started/pip.md | 8 +- .../index.md | 2 +- .../04_Process_datasets_and_import.md | 2 +- .../06_Calculate_statistics_for_records.md | 30 +- ..._Calculate_statistics_for_records_12_0.png | Bin 34014 -> 34095 bytes .../08_Fit_model_to_series_data.md | 12 +- .../10_Material_datasheet_report.md | 3 +- ...rting_data_using_EngineeringDataService.md | 2 - .../samples/foundation/04_Deleting_records.md | 4 +- .../05_Functional_data_and_importing_data.md | 4 +- ...06_Importing_and_exporting_tabular_data.md | 4 +- .../samples/foundation/07_Modified_date.md | 2 +- .../09_Modifying_record_link_groups.md | 2 +- .../foundation/11_Get_unit_conversions.md | 290 +++++++++--------- .../samples/streamlined/01_Get_Attributes.md | 6 +- .../samples/streamlined/03_Search_MI.md | 8 +- .../samples/streamlined/05_Edit_Data.md | 14 +- .../samples/streamlined/06_Create_Records.md | 20 +- .../streamlined/07_Import_Functional_Data.md | 4 +- .../streamlined/08_Create_Functional_Data.md | 2 +- .../streamlined/09_Edit_Tabular_Data.md | 2 +- .../11_Add_Files_Pictures_and_Hyperlinks.md | 2 +- .../streamlined/12_Add_Point_Range_Data.md | 2 +- .../13_Add_Date_Integer_and_Logical_Data.md | 4 +- .../15_Use_Exporters_for_FEA_Export.md | 2 +- .../samples/streamlined/16_Link_Records.md | 4 +- .../scripting-toolkit-dev-portal-25r2/toc.yml | 6 +- .../user_guide/authentication.md | 19 +- .../user_guide/index.md | 5 +- .../user_guide/streamlined_api.md | 26 +- 40 files changed, 290 insertions(+), 298 deletions(-) diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/api/attribute-definitions.md b/2025R2/scripting-toolkit-dev-portal-25r2/api/attribute-definitions.md index 22ec30137e..fea10c4964 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/api/attribute-definitions.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/api/attribute-definitions.md @@ -1,7 +1,5 @@ # Attribute definitions - - @@ -334,6 +332,15 @@ Extended [`AttributeDefinition`](#GRANTA_MIScriptingToolkit.granta.mi_attribute_ Provides properties to view the table-wide minimum and maximum values for this attribute. + + +#### *property* is_unique + +Whether this attribute is defined as unique. + +* **Returns:** + bool + #### *property* max @@ -420,6 +427,15 @@ Unit symbol. Extended [`AttributeDefinition`](#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.AttributeDefinition) class for short text attributes. + + +#### *property* is_unique + +Whether this attribute is defined as unique. + +* **Returns:** + bool + ### *class* AttributeDefinitionTabular diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/api/attribute-values.md b/2025R2/scripting-toolkit-dev-portal-25r2/api/attribute-values.md index b01ec022cd..4e5a64d476 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/api/attribute-values.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/api/attribute-values.md @@ -1,7 +1,5 @@ # Attribute values - - diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/api/database.md b/2025R2/scripting-toolkit-dev-portal-25r2/api/database.md index 679220373e..573d51ba69 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/api/database.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/api/database.md @@ -1,7 +1,5 @@ # Database - - diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/api/helpers.md b/2025R2/scripting-toolkit-dev-portal-25r2/api/helpers.md index 8cce888668..8623b94292 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/api/helpers.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/api/helpers.md @@ -1,7 +1,5 @@ # Helper functions - - diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/api/record.md b/2025R2/scripting-toolkit-dev-portal-25r2/api/record.md index ced3f18cd9..998c6db1b1 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/api/record.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/api/record.md @@ -1,7 +1,5 @@ # Record - - @@ -404,6 +402,16 @@ required. Can also be used to populate attributes. Makes a Service Layer call. Always includes binary data in the response. Use the [`bulk_fetch()`](table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table.bulk_fetch) method if URL data representation is required. +* **Returns:** + None + + + +#### refetch_pseudo_attributes() + +Fetches pseudo-attribute data for this record, and updates subsets for the record if not set. +Makes a Service Layer call. + * **Returns:** None @@ -414,6 +422,9 @@ data representation is required. Fetches pseudo-attribute data for this record, and updates subsets for the record if not set. Makes a Service Layer call. +#### Deprecated +Deprecated since version 4.2: This method has been renamed to `refetch_pseudo_attributes`. + * **Returns:** None @@ -429,7 +440,7 @@ Attributes associated with the record, indexed by attribute name. -#### get_attributes(names=None, types=None, include_attributes=True, include_metas=False, include_pseudos=False, empty=None) +#### get_attributes(names=None, types=None, include_attributes=True, include_meta_attributes=False, include_pseudo_attributes=False, empty=None, \*\*kwargs) Retrieve a list of attributes from the `record.attributes` dictionary. You can narrow the results by specifying the attribute names or data types, or the required attribute categories (attribute, @@ -442,7 +453,7 @@ This operation performs no subset filtering, so all tabular rows will be include regardless of the subset membership of the linked records. * **Example:** - `r.get_attributes(names=['Density', 'Stress-Strain'], types=['POIN', 'FUNC'], include_metas=True)` + `r.get_attributes(names=['Density', 'Stress-Strain'], types=['POIN', 'FUNC'], include_meta_attributes=True)` will return all point or functional series attributes or meta-attributes named Density or Stress-Strain from the record. * **Parameters:** @@ -451,9 +462,18 @@ regardless of the subset membership of the linked records. LTXT, PICT, POIN, RNGE, STXT, TABL) * **include_attributes** – bool (whether to retrieve attributes that are not meta-attributes or pseudo-attributes; `True` by default) - * **include_metas** – bool (whether to retrieve meta-attributes; `False` by default) - * **include_pseudos** – bool (whether to retrieve pseudo-attributes; `False` by default) + * **include_meta_attributes** – bool (whether to retrieve meta-attributes; `False` by default) + * **include_pseudo_attributes** – bool (whether to retrieve pseudo-attributes; `False` by default) * **empty** – bool (whether to check if the returned attributes are populated) + +#### Versionchanged +Changed in version 4.2: Argument `include_metas` was renamed to `include_meta_attributes`. `include_metas` may still be used, +but is deprecated. + +#### Versionchanged +Changed in version 4.2: Argument `include_pseudos` was renamed to `include_pseudo_attributes`. `include_pseudos` may still be +used, but is deprecated. + * **Returns:** List[Union[[`PseudoAttributeValue`](attribute-values.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_value_classes.PseudoAttributeValue), [`AttributeValue`](attribute-values.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_value_classes.AttributeValue)]] @@ -703,7 +723,7 @@ Some cached properties are cleared after the record has been moved, as they woul They will be dynamically retrieved from the server on property access, or can be manually refreshed via the following methods: -* [`Record.refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos) +* [`Record.refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes) * [`Record.refresh_path()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refresh_path) * [`Record.find_parent()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.find_parent) * [`Record.refresh_properties()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refresh_properties) @@ -752,7 +772,7 @@ Data validation rules, such as attribute value uniqueness, might prevent record Record version number. This is set to None if the record is in a non version-controlled table. Read-only property. This is only available for records that exist on the server. -This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos). +This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes). * **Return type:** [int](https://docs.python.org/3/library/functions.html#int) | None @@ -764,7 +784,7 @@ This property is populated from a pseudo-attribute value and can be refreshed vi Whether the current user has write permissions on the record. Read-only property. This is only available for records that exist on the server. -This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos). +This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes). * **Return type:** [bool](https://docs.python.org/3/library/functions.html#bool) @@ -778,7 +798,7 @@ Short name of the parent record. If the record is at the root of the table, returns the name of the table. Read-only property. This is only available for records that exist on the server. -This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos). +This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes). * **Return type:** [str](https://docs.python.org/3/library/stdtypes.html#str) @@ -792,7 +812,7 @@ Name of the parent record. If the record is at the root of the table, returns the name of the table. Read-only property. This is only available for records that exist on the server. -This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos). +This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes). * **Return type:** [str](https://docs.python.org/3/library/stdtypes.html#str) @@ -806,7 +826,7 @@ History identity of the parent record. If the record is at the root of the table, returns the history identity of the table root node. Read-only property. This is only available for records that exist on the server. -This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos). +This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes). * **Return type:** [int](https://docs.python.org/3/library/functions.html#int) @@ -818,7 +838,7 @@ This property is populated from a pseudo-attribute value and can be refreshed vi Datetime of the last modification. Read-only property. This is only available for records that exist on the server. -This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos). +This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes). * **Return type:** [datetime.datetime](https://docs.python.org/3/library/datetime.html#datetime.datetime) @@ -830,7 +850,7 @@ This property is populated from a pseudo-attribute value and can be refreshed vi User who last modified the record. Read-only property. This is only available for records that exist on the server. -This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos). +This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes). * **Return type:** [str](https://docs.python.org/3/library/stdtypes.html#str) @@ -842,7 +862,7 @@ This property is populated from a pseudo-attribute value and can be refreshed vi Datetime of the record creation. Read-only property. This is only available for records that exist on the server. -This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos). +This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes). * **Return type:** [datetime.datetime](https://docs.python.org/3/library/datetime.html#datetime.datetime) @@ -854,7 +874,7 @@ This property is populated from a pseudo-attribute value and can be refreshed vi User who created the record. Read-only property. This is only available for records that exist on the server. -This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos). +This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes). * **Return type:** [str](https://docs.python.org/3/library/stdtypes.html#str) @@ -866,7 +886,7 @@ This property is populated from a pseudo-attribute value and can be refreshed vi Datetime of the record release. Read-only property. This is only available for records that exist on the server. -This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudos()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudos). +This property is populated from a pseudo-attribute value and can be refreshed via [`refetch_pseudo_attributes()`](#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.refetch_pseudo_attributes). * **Return type:** [datetime.datetime](https://docs.python.org/3/library/datetime.html#datetime.datetime) diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/api/session.md b/2025R2/scripting-toolkit-dev-portal-25r2/api/session.md index ec311ae4c8..60a208c809 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/api/session.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/api/session.md @@ -1,7 +1,5 @@ # Session - - diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/api/supporting.md b/2025R2/scripting-toolkit-dev-portal-25r2/api/supporting.md index ec42dcc81b..de50e8ec3d 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/api/supporting.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/api/supporting.md @@ -1,7 +1,5 @@ # Schema and supporting items - - diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/api/table.md b/2025R2/scripting-toolkit-dev-portal-25r2/api/table.md index 2a29b62cf0..3f0e7d98d1 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/api/table.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/api/table.md @@ -1,7 +1,5 @@ # Table - - diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/changelog.md b/2025R2/scripting-toolkit-dev-portal-25r2/changelog.md index 8c57485067..108942540f 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/changelog.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/changelog.md @@ -50,6 +50,10 @@ This section describes the key features introduced or improved in MI Scripting T to access the parent record. It now raises a [`PermissionError`](https://docs.python.org/3/library/exceptions.html#PermissionError). * Range cell data returned by [`AttributeTabular.value`](api/attribute-values.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_value_classes.AttributeTabular.value) now includes additional items, `low_is_inclusive` and `high_is_inclusive`, to describe whether the low and high value are included in the range. +* [`SearchCriterion`](api/supporting.md#GRANTA_MIScriptingToolkit.granta.mi_meta_classes.SearchCriterion) now accepts [`RecordColor`](api/constants.md#GRANTA_MIScriptingToolkit.granta.mi_constants.RecordColor) and [`RecordType`](api/constants.md#GRANTA_MIScriptingToolkit.granta.mi_constants.RecordType) as criterion values for searches + on record properties [`RecordProperties.color`](api/constants.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.RecordProperties.color) [`RecordProperties.type`](api/constants.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.RecordProperties.type) respectively. +* Classes [`AttributeDefinitionShortText`](api/attribute-definitions.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.AttributeDefinitionShortText) and [`AttributeDefinitionInteger`](api/attribute-definitions.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.AttributeDefinitionInteger) now include the `.is_unique` + property which indicates whether the attribute values are required to be unique. @@ -74,6 +78,8 @@ This section describes the key features introduced or improved in MI Scripting T [`AttributeTabular.load()`](api/attribute-values.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_value_classes.AttributeTabular.load). * Using [`Table.set_display_unit()`](api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table.set_display_unit) for attributes with a temperature based unit now correctly results in the data being exported in the requested unit. +* [`Table.bulk_fetch_data_revision_history()`](api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table.bulk_fetch_data_revision_history) no longer raises a [`TypeError`](https://docs.python.org/3/library/exceptions.html#TypeError) when + `parallelize=True` and the table contains meta-attributes. @@ -168,6 +174,7 @@ This section describes deprecated functionality which will be removed or changed | [`extract_parameter_value()`](api/helpers.md#GRANTA_MIScriptingToolkit.granta.mi_functions.extract_parameter_value) | Access the [`ParameterValue.discreteValue`](foundation/api.md#GRANTA_MIScriptingToolkit.ParameterValue.ParameterValue.discreteValue) and
[`ParameterValue.numericValue`](foundation/api.md#GRANTA_MIScriptingToolkit.ParameterValue.ParameterValue.numericValue) properties directly. | | Argument `parallelise` of methods [`Session.bulk_fetch_release_states()`](api/session.md#GRANTA_MIScriptingToolkit.granta.mi.Session.bulk_fetch_release_states),
[`Session.bulk_delete_or_withdraw_records()`](api/session.md#GRANTA_MIScriptingToolkit.granta.mi.Session.bulk_delete_or_withdraw_records), [`Table.bulk_fetch()`](api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table.bulk_fetch), [`Table.bulk_link_fetch()`](api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table.bulk_link_fetch),
[`Table.bulk_fetch_associated_records()`](api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table.bulk_fetch_associated_records), and [`Table.bulk_fetch_data_revision_history()`](api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table.bulk_fetch_data_revision_history). | Use the argument `parallelize`. | | Method [`Session.assert_can_run_parallelised()`](api/session.md#GRANTA_MIScriptingToolkit.granta.mi.Session.assert_can_run_parallelised). | Use renamed method [`Session.assert_can_run_parallelized()`](api/session.md#GRANTA_MIScriptingToolkit.granta.mi.Session.assert_can_run_parallelized). | +| Record color and record type [`SearchCriterion`](api/supporting.md#GRANTA_MIScriptingToolkit.granta.mi_meta_classes.SearchCriterion) using [`str`](https://docs.python.org/3/library/stdtypes.html#str) criterion values. | Define the criterion value using the enumerations [`RecordColor`](api/constants.md#GRANTA_MIScriptingToolkit.granta.mi_constants.RecordColor) and [`RecordType`](api/constants.md#GRANTA_MIScriptingToolkit.granta.mi_constants.RecordType). | diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/docfx.json b/2025R2/scripting-toolkit-dev-portal-25r2/docfx.json index e0d5f8ea97..f67de2334d 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/docfx.json +++ b/2025R2/scripting-toolkit-dev-portal-25r2/docfx.json @@ -1,8 +1,8 @@ { "build": { "globalMetadata": { - "title": "Granta MI scripting toolkit 4.2", - "summary": "Granta scripting toolkit documentation", + "title": "Granta MI Scripting Toolkit 4.2", + "summary": "Granta MI Scripting Toolkit documentation", "version": "4.2", "product": "Granta", "programming language": "Python", diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/getting_started/pip.md b/2025R2/scripting-toolkit-dev-portal-25r2/getting_started/pip.md index 18e9d2e30f..4bd7131c35 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/getting_started/pip.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/getting_started/pip.md @@ -24,6 +24,8 @@ MI Scripting Toolkit for pip is supported on the following platforms: | RHEL 8.8+, 9.3+ [5](#id11) | Supported | Supported | Certified | Supported | | Rocky Linux
8.9+, 9.3+ [6](#id12) | Supported | Supported | Certified | Supported | +Test platform details: + * **[1]** Automated testing performed on Windows Server 2022. Manual testing performed on Windows Server 2019 and Windows 11. * **[2]** Automated testing performed on Ubuntu 22.04 development release. Manual testing performed on Ubuntu 22.04.4. * **[3]** Automated testing performed on Ubuntu 24.04 development release. Manual testing performed on Ubuntu 24.04.2. @@ -77,9 +79,9 @@ The list above include only the direct dependencies of the MI Scripting Toolkit (dependencies of dependencies) are not given here, since in general they depend on the specific version of the dependency that is selected, and as a result will change over time. -The recommended way to determine the full requirements at a particular point in time is to install the Scripting -[https://docs.python.org/3/library/venv.html](https://docs.python.org/3/library/venv.html), and then use `pip list` or `pip freeze` to display the installed -packages. +To determine the full requirements at a particular point in time, install the Scripting Toolkit into an empty virtual +environment (see [https://docs.python.org/3/library/venv.html](https://docs.python.org/3/library/venv.html) for details), and then use `pip list` or `pip +freeze` to display the installed packages. diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/index.md b/2025R2/scripting-toolkit-dev-portal-25r2/index.md index 27f4c1bd03..33302c8f43 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/index.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/index.md @@ -1,6 +1,6 @@ # Introduction - + * [Getting started](getting_started/index.md): Learn how to install MI Scripting Toolkit and run some simple commands. * [User guide](user_guide/index.md): Learn more about MI Scripting Toolkit. diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/04_Process_datasets_and_import.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/04_Process_datasets_and_import.md index 6ee8350696..f731659513 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/04_Process_datasets_and_import.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/04_Process_datasets_and_import.md @@ -896,6 +896,6 @@ mi.update([record]) *Previous cell output:* ```output -[] +[] ``` diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/06_Calculate_statistics_for_records.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/06_Calculate_statistics_for_records.md index 04e7b25008..848d36b666 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/06_Calculate_statistics_for_records.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/06_Calculate_statistics_for_records.md @@ -307,26 +307,12 @@ for orientation, specimens in test_records.items(): ``` *Previous cell output:* ```output -Rollup completed for the specimen 'LBU15', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=9cc50207-660d-4999-965c-34b0d3ae7735' -```*Previous cell output:* -```output -Rollup completed for the specimen 'LBU14', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=c6778dd5-da3a-46aa-8d44-08ccb52db42a' -```*Previous cell output:* -```output -Rollup completed for the specimen 'LBJ83', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=a670a603-14fc-4613-bf8a-74face89a197' -```*Previous cell output:* -```output -Rollup completed for the specimen 'LBJ62', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=44bffe3d-0cab-4f1c-8cfe-4e0379a6b74d' -```*Previous cell output:* -```output -Rollup completed for the specimen 'LBJ53', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=c81e41f3-8c41-468b-bc34-8e033ee46406' -```*Previous cell output:* -```output -Rollup completed for the specimen 'LBJ42', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=ffb62403-3a38-4dfb-92e5-bb8e842a7657' -```*Previous cell output:* -```output -Rollup completed for the specimen 'LBJ14', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=7be31235-7aec-443d-ab11-8271ebac7479' -```*Previous cell output:* -```output -Rollup completed for the specimen 'LBJ13', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=36b018fb-2eea-468a-b593-512143173449' +Rollup completed for the specimen 'LBU15', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=85f8cea3-735d-4157-aea7-42aa5359108d' +Rollup completed for the specimen 'LBU14', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=c928d243-c44f-45c0-ba73-312277c2c722' +Rollup completed for the specimen 'LBJ83', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=f570eba1-7a0c-455e-b107-e7fda7f2c2f3' +Rollup completed for the specimen 'LBJ62', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=04a7ee0e-392b-4d0e-a465-2f533422ee21' +Rollup completed for the specimen 'LBJ53', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=1093c7f1-058e-4b69-ad6a-62d22d25210c' +Rollup completed for the specimen 'LBJ42', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=8ce9868d-1e01-4877-b4ba-312e812a67c6' +Rollup completed for the specimen 'LBJ14', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=4658930d-c9f9-4471-8baf-e6bf80b7d1e9' +Rollup completed for the specimen 'LBJ13', view this record at 'http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=778f3c0b-6842-4be9-92fe-3b3195fe1107' ``` \ No newline at end of file diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/06_Calculate_statistics_for_records_files/06_Calculate_statistics_for_records_12_0.png b/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/06_Calculate_statistics_for_records_files/06_Calculate_statistics_for_records_12_0.png index 22a52282952c4c562e20ba35687a194683870228..94897b320fc78d167879d0cddd5f760593358d76 100644 GIT binary patch literal 34095 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 e^8ekJuJDBiED~6Ab^`qvv)purNvW}W-0 literal 34014 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 diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/08_Fit_model_to_series_data.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/08_Fit_model_to_series_data.md index 57461114d1..7b1bdc0428 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/08_Fit_model_to_series_data.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/08_Fit_model_to_series_data.md @@ -84,20 +84,10 @@ for test_group in temperature_test_groups: *Previous cell output:* ```output Fetched attributes for 6 records at 810.9K -```*Previous cell output:* -```output Fetched attributes for 6 records at 194.3K -```*Previous cell output:* -```output Fetched attributes for 6 records at 422.0K -```*Previous cell output:* -```output Fetched attributes for 6 records at 588.7K -```*Previous cell output:* -```output Fetched attributes for 6 records at 699.8K -```*Previous cell output:* -```output Fetched attributes for 6 records at 296.1K ``` ## Define the Ramberg-Osgood model @@ -105,7 +95,7 @@ Fetched attributes for 6 records at 296.1K The Ramberg-Osgood model expresses the total stress as a function of the strain, the Elastic Modulus and two model parameters, conventionally `K` and `n`: -![Strain = Stress/Elastic Modulus + K\*(Stress/Elastic Modulus)\^n](assets/08_RambergOsgood.svg 'Ramberg-Osgood equation') +![Strain = Stress/Elastic Modulus + K\*(Stress/Elastic Modulus)\^n](assets/08_RambergOsgood.svg) ```python diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/10_Material_datasheet_report.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/10_Material_datasheet_report.md index 23b786a8b9..c2e02e836b 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/10_Material_datasheet_report.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/data-analytics/10_Material_datasheet_report.md @@ -516,7 +516,8 @@ report.save("output/10_report.docx") A screenshot in Word is shown below (only the first page is shown): -![The first page of a populated Word document showing a company logo, populated data tables, and a plot of thermal conductivity vs temperature.](assets/10_report-screenshot.png) +![The first page of a populated Word document showing a company logo, populated data tables, and a plot of thermal +conductivity vs temperature.](assets/10_report-screenshot.png) ## Optional: Convert the file to PDF (not available in HTML documentation) diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/02_Exporting_data_using_EngineeringDataService.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/02_Exporting_data_using_EngineeringDataService.md index 29ad44d9d5..43036460ae 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/02_Exporting_data_using_EngineeringDataService.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/02_Exporting_data_using_EngineeringDataService.md @@ -37,8 +37,6 @@ for exporter in response.exporters: *Previous cell output:* ```output Output of available Exporters for Ansys Workbench -```*Previous cell output:* -```output 458E9A7E-C268-4ED0-9CC1-FF7438521B4F (ANSYS Workbench) - Exports linear, temperature-independent, isotropic data to the Ansys Workbench format CE8DCFA2-B3EE-4545-8D3E-82810FA92AFC (ANSYS Workbench) - Exports linear, temperature-dependent, isotropic data to the Ansys Workbench format 4B0B1EA3-8760-43DF-8060-2C79CA471D4C (ANSYS Workbench) - Exports linear, temperature-independent, isotropic with simple failure data to the Ansys Workbench format diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/04_Deleting_records.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/04_Deleting_records.md index d3bc15ec95..73bae45465 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/04_Deleting_records.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/04_Deleting_records.md @@ -43,7 +43,7 @@ print(f'Imported record "{imported_records[0].longName}" to table "{table_name}" ``` *Previous cell output:* ```output -Imported record "Scripting toolkit foundation layer example 04:Wed Apr 9 10:47:50 2025" to table "Tensile Test Data" +Imported record "Scripting toolkit foundation layer example 04:Thu Apr 24 22:57:24 2025" to table "Tensile Test Data" ``` Now let's delete it! @@ -58,5 +58,5 @@ print(f"Record {imported_records[0].longName} was deleted") ``` *Previous cell output:* ```output -Record Scripting toolkit foundation layer example 04:Wed Apr 9 10:47:50 2025 was deleted +Record Scripting toolkit foundation layer example 04:Thu Apr 24 22:57:24 2025 was deleted ``` \ No newline at end of file diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/05_Functional_data_and_importing_data.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/05_Functional_data_and_importing_data.md index 26774e7983..236c4dc300 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/05_Functional_data_and_importing_data.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/05_Functional_data_and_importing_data.md @@ -181,7 +181,7 @@ ax.legend() *Previous cell output:* ```output - + ``` @@ -276,5 +276,5 @@ for record in setRecordAttributesResponse.recordsImported: ``` *Previous cell output:* ```output -Imported record Scripting toolkit foundation layer example 05:Wed Apr 9 10:48:16 2025 to Granta MI database +Imported record Scripting toolkit foundation layer example 05:Thu Apr 24 22:57:51 2025 to Granta MI database ``` \ No newline at end of file diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/06_Importing_and_exporting_tabular_data.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/06_Importing_and_exporting_tabular_data.md index 1c79f92285..c1d1a61d90 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/06_Importing_and_exporting_tabular_data.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/06_Importing_and_exporting_tabular_data.md @@ -206,7 +206,7 @@ print(recName) ``` *Previous cell output:* ```output -Scripting toolkit foundation layer example 06:Wed Apr 9 10:48:50 2025 +Scripting toolkit foundation layer example 06:Thu Apr 24 22:58:24 2025 ``` Import the record to a Granta MI database. @@ -287,5 +287,5 @@ print( ``` *Previous cell output:* ```output -Use MI Viewer to view Scripting toolkit foundation layer example 06:Wed Apr 9 10:48:50 2025 and check that the Order in 'Characterization of this material' is 1000 +Use MI Viewer to view Scripting toolkit foundation layer example 06:Thu Apr 24 22:58:24 2025 and check that the Order in 'Characterization of this material' is 1000 ``` \ No newline at end of file diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/07_Modified_date.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/07_Modified_date.md index f55af09657..384d135409 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/07_Modified_date.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/07_Modified_date.md @@ -91,5 +91,5 @@ for record in exported_data: *Previous cell output:* ```output "Ansys Granta 1" imported the record on 2023-09-20T12:11:05.873 -The record was last modified on 2025-04-09T10:49:22.64 by "ANSYS\mi-sw-admin" +The record was last modified on 2025-04-24T22:58:49.89 by "ANSYS\mi-sw-admin" ``` \ No newline at end of file diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/09_Modifying_record_link_groups.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/09_Modifying_record_link_groups.md index d929f5891d..055198e741 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/09_Modifying_record_link_groups.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/09_Modifying_record_link_groups.md @@ -120,5 +120,5 @@ print(f"{source_guid} ({source_name}) -> {target_guid} ({target_name})") *Previous cell output:* ```output Created 1 link(s) -000016f6-000e-4fff-8fff-dd92ffff0000 (Cast sheet) -> c15ee8ea-7e3c-4888-b9c8-610d37e50721 (Scripting toolkit foundation layer example 09:Wed Apr 9 10:49:51 2025) +000016f6-000e-4fff-8fff-dd92ffff0000 (Cast sheet) -> 2fb527ec-9389-431c-9d34-cc3a71bef19f (Scripting toolkit foundation layer example 09:Thu Apr 24 22:59:30 2025) ``` \ No newline at end of file diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/11_Get_unit_conversions.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/11_Get_unit_conversions.md index c0c96df10e..6545a661ae 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/11_Get_unit_conversions.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/foundation/11_Get_unit_conversions.md @@ -72,212 +72,212 @@ df_flipped.style - +
- - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + +
 factoroffsetequationconverted resultfactoroffsetequationconverted result
10^6 psi0.1450380.000000174.0004272460938 * 0.14503773773039605 + 0.025.23662810^6 psi0.1450380.000000174.0004272460938 * 0.14503773773039605 + 0.025.236628
ksi145.0377380.000000174.0004272460938 * 145.03773773039603 + 0.025236.628332ksi145.0377380.000000174.0004272460938 * 145.03773773039603 + 0.025236.628332
psi145037.7377300.000000174.0004272460938 * 145037.73773039604 + 0.025236628.331896psi145037.7377300.000000174.0004272460938 * 145037.73773039604 + 0.025236628.331896
MGO125663.7061060.000000174.0004272460938 * 125663.70610560982 + 0.021865538.551704MGO125663.7061060.000000174.0004272460938 * 125663.70610560982 + 0.021865538.551704
Pa1000000000.0000000.000000174.0004272460938 * 1000000000.0 + 0.0174000427246.093811Pa1000000000.0000000.000000174.0004272460938 * 1000000000.0 + 0.0174000427246.093811
MPa1000.0000000.000000174.0004272460938 * 1000.0 + 0.0174000.427246MPa1000.0000000.000000174.0004272460938 * 1000.0 + 0.0174000.427246
J/m^31000000000.0000000.000000174.0004272460938 * 1000000000.0 + 0.0174000427246.093811J/m^31000000000.0000000.000000174.0004272460938 * 1000000000.0 + 0.0174000427246.093811
MJ/m^31000.0000000.000000174.0004272460938 * 1000.0 + 0.0174000.427246MJ/m^31000.0000000.000000174.0004272460938 * 1000.0 + 0.0174000.427246
erg/cm^310000000000.0000020.000000174.0004272460938 * 10000000000.000002 + 0.01740004272460.938477erg/cm^310000000000.0000020.000000174.0004272460938 * 10000000000.000002 + 0.01740004272460.938477
ft.lbf/in^312086.4781440.000000174.0004272460938 * 12086.478144199671 + 0.02103052.360991ft.lbf/in^312086.4781440.000000174.0004272460938 * 12086.478144199671 + 0.02103052.360991
kJ/m^31000000.0000000.000000174.0004272460938 * 1000000.0 + 0.0174000427.246094kJ/m^31000000.0000000.000000174.0004272460938 * 1000000.0 + 0.0174000427.246094
inHg295299.7144450.000000174.0004272460938 * 295299.7144451761 + 0.051382276.479110inHg295299.7144450.000000174.0004272460938 * 295299.7144451761 + 0.051382276.479110
Ba10000000000.0000000.000000174.0004272460938 * 10000000000.0 + 0.01740004272460.937988Ba10000000000.0000000.000000174.0004272460938 * 10000000000.0 + 0.01740004272460.937988
hPa10000000.0000000.000000174.0004272460938 * 10000000.0 + 0.01740004272.460938hPa10000000.0000000.000000174.0004272460938 * 10000000.0 + 0.01740004272.460938
mb10000000.0000000.000000174.0004272460938 * 10000000.0 + 0.01740004272.460938mb10000000.0000000.000000174.0004272460938 * 10000000.0 + 0.01740004272.460938
bar10000.0000000.000000174.0004272460938 * 10000.0 + 0.01740004.272461bar10000.0000000.000000174.0004272460938 * 10000.0 + 0.01740004.272461
atm9869.2326670.000000174.0004272460938 * 9869.232667160128 + 0.01717250.700677atm9869.2326670.000000174.0004272460938 * 9869.232667160128 + 0.01717250.700677
torr7500637.5541920.000000174.0004272460938 * 7500637.554192106 + 0.01305114139.047523torr7500637.5541920.000000174.0004272460938 * 7500637.554192106 + 0.01305114139.047523
lbf/ft^220885434.2331770.000000174.0004272460938 * 20885434.233177025 + 0.03634074479.792996lbf/ft^220885434.2331770.000000174.0004272460938 * 20885434.233177025 + 0.03634074479.792996
HV101.9716210.000000174.0004272460938 * 101.97162129779282 + 0.017743.105673HV101.9716210.000000174.0004272460938 * 101.97162129779282 + 0.017743.105673
kgf/mm^2101.9716210.000000174.0004272460938 * 101.97162129779282 + 0.017743.105673kgf/mm^2101.9716210.000000174.0004272460938 * 101.97162129779282 + 0.017743.105673
dyn/cm^210000000000.0000000.000000174.0004272460938 * 10000000000.0 + 0.01740004272460.937988dyn/cm^210000000000.0000000.000000174.0004272460938 * 10000000000.0 + 0.01740004272460.937988
ft.lbf/ft^320885434.2331770.000000174.0004272460938 * 20885434.23317702 + 0.03634074479.792995ft.lbf/ft^320885434.2331770.000000174.0004272460938 * 20885434.23317702 + 0.03634074479.792995
in.lbf/in^3145037.7377300.000000174.0004272460938 * 145037.73773039604 + 0.025236628.331896in.lbf/in^3145037.7377300.000000174.0004272460938 * 145037.73773039604 + 0.025236628.331896
J/cm^31000.0000000.000000174.0004272460938 * 1000.0000000000001 + 0.0174000.427246J/cm^31000.0000000.000000174.0004272460938 * 1000.0000000000001 + 0.0174000.427246
kN/cm^2100.0000000.000000174.0004272460938 * 100.0 + 0.017400.042725kN/cm^2100.0000000.000000174.0004272460938 * 100.0 + 0.017400.042725
Msi0.1450380.000000174.0004272460938 * 0.14503773773039605 + 0.025.236628Msi0.1450380.000000174.0004272460938 * 0.14503773773039605 + 0.025.236628
N/mm^21000.0000000.000000174.0004272460938 * 1000.0 + 0.0174000.427246N/mm^21000.0000000.000000174.0004272460938 * 1000.0 + 0.0174000.427246
diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/01_Get_Attributes.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/01_Get_Attributes.md index 033db415e1..16690edd96 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/01_Get_Attributes.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/01_Get_Attributes.md @@ -59,12 +59,8 @@ for name, att in tab.attributes.items(): ```output Name - Type - Unit - Meta? ---------------------------------------------------------------------- -```*Previous cell output:* -```output Base - DISC - - False -Composition - STXT - - False -```*Previous cell output:* -```output +Composition - STXT - - False Density - POIN - kg/m^3 - False Description - LTXT - - False Document - FILE - - False diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/03_Search_MI.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/03_Search_MI.md index cac0cbf4ef..38c61fbe5b 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/03_Search_MI.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/03_Search_MI.md @@ -389,13 +389,9 @@ for r in created_records[:5]: Record Name | Created Date ----------------------------------------------------------------------------------------------------------------- MTS-615775 | 2023/09/20 12:11:05 - MTS-615744 | 2023/09/20 12:11:05 -```*Previous cell output:* -```output + MTS-615744 | 2023/09/20 12:11:05 MTS-615723 | 2023/09/20 12:11:05 - MTS-615772 | 2023/09/20 12:11:05 -```*Previous cell output:* -```output + MTS-615772 | 2023/09/20 12:11:05 MTS-615741 | 2023/09/20 12:11:05 ``` Pseudo-attributes are not table specific and can be used in database criteria searches via diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/05_Edit_Data.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/05_Edit_Data.md index aefcb31f62..227b2f99f9 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/05_Edit_Data.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/05_Edit_Data.md @@ -44,7 +44,7 @@ record, folder *Previous cell output:* ```output -(, +(, ) ``` @@ -119,7 +119,7 @@ print(f"Record Name: {record.name}, State: {record.release_state}") ``` *Previous cell output:* ```output -Record Name: Scripting Toolkit Example 5:Wed Apr 9 10:41:06 2025, State: Unreleased +Record Name: Scripting Toolkit Example 5:Thu Apr 24 22:50:31 2025, State: Unreleased ``` ## 'Not Applicable' flag Further edits can be made to the same **Record** object. In this case, the *Condition* attribute is not relevant, @@ -143,7 +143,7 @@ print(f'Record Name: "{record.name}", State: "{record.release_state}"') ``` *Previous cell output:* ```output -Record Name: "Scripting Toolkit Example 5:Wed Apr 9 10:41:06 2025", State: "Released" +Record Name: "Scripting Toolkit Example 5:Thu Apr 24 22:50:31 2025", State: "Released" ``` Check the `Record.all_versions` property for a dictionary of all versions of the record. The dictionary contains a single version, confirming that only a single version was created in Granta MI. @@ -157,7 +157,7 @@ record.all_versions *Previous cell output:* ```output -{'v1': } +{'v1': } ``` @@ -200,7 +200,7 @@ print(f'"Record Name: {record.name}", State: "{record.release_state}"') ``` *Previous cell output:* ```output -"Record Name: Scripting Toolkit Example 5:Wed Apr 9 10:41:06 2025", State: "Released" +"Record Name: Scripting Toolkit Example 5:Thu Apr 24 22:50:31 2025", State: "Released" ``` Check the `Record.all_versions` property again. The dictionary contains two versions, confirming that updating the Mooney-Rivlin attribute has created and released a second version of the record. @@ -214,8 +214,8 @@ record.all_versions *Previous cell output:* ```output -{'v1': , - 'v2': } +{'v1': , + 'v2': } ``` diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/06_Create_Records.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/06_Create_Records.md index 710b77a06a..dde8f510dc 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/06_Create_Records.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/06_Create_Records.md @@ -35,11 +35,11 @@ new_records *Previous cell output:* ```output -[, - , - , - , - ] +[, + , + , + , + ] ``` @@ -57,11 +57,11 @@ for rec in recs: *Previous cell output:* ```output New records: -http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=988141cb-d8e2-40cf-84e5-981b9eeb2caa -http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=32457131-2131-4010-bbb3-ecd09d04a305 -http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=0a681486-1d44-4e53-8531-623106fa3398 -http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=fdc06c10-6d95-43a9-b613-65daf9453ed7 -http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=20c11e64-7ffd-43a3-927f-f7ecaf069456 +http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=a5d09746-e913-461e-95ed-c1e99dd47417 +http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=568f97ec-7a71-4930-bc4f-d93a88f5628c +http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=90302b6b-cdff-4dbe-b02e-eeb0fcfd5757 +http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=439e3fb4-e63e-46da-b2df-956f90321c4c +http://my.server.name/mi/datasheet.aspx?dbKey=MI_Training&recordHistoryGuid=5d991280-8654-4c2a-9326-d9a6ac01458e ``` ## Delete the records ``Session.bulk_delete_or_withdraw_records`` accepts any list of records (e.g. results of a search, diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/07_Import_Functional_Data.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/07_Import_Functional_Data.md index c6213a309c..0733268a7b 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/07_Import_Functional_Data.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/07_Import_Functional_Data.md @@ -39,7 +39,7 @@ rec *Previous cell output:* ```output - + ``` @@ -253,6 +253,6 @@ mi.update([rec]) *Previous cell output:* ```output -[] +[] ``` diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/08_Create_Functional_Data.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/08_Create_Functional_Data.md index f4f03aaa78..a2ed6da68e 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/08_Create_Functional_Data.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/08_Create_Functional_Data.md @@ -421,6 +421,6 @@ mi.update([record]) *Previous cell output:* ```output -[] +[] ``` diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/09_Edit_Tabular_Data.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/09_Edit_Tabular_Data.md index 77a59890a0..d6bd12854b 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/09_Edit_Tabular_Data.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/09_Edit_Tabular_Data.md @@ -167,6 +167,6 @@ mi.update_links([new_rec]) *Previous cell output:* ```output -[] +[] ``` diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/11_Add_Files_Pictures_and_Hyperlinks.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/11_Add_Files_Pictures_and_Hyperlinks.md index 11d45b5e60..ea7449f877 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/11_Add_Files_Pictures_and_Hyperlinks.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/11_Add_Files_Pictures_and_Hyperlinks.md @@ -33,7 +33,7 @@ record, folder *Previous cell output:* ```output -(, +(, ) ``` diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/12_Add_Point_Range_Data.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/12_Add_Point_Range_Data.md index 74adb2447b..2f99592a00 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/12_Add_Point_Range_Data.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/12_Add_Point_Range_Data.md @@ -36,7 +36,7 @@ record, folder *Previous cell output:* ```output -(, +(, ) ``` diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/13_Add_Date_Integer_and_Logical_Data.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/13_Add_Date_Integer_and_Logical_Data.md index a15ac0c5c3..2402809953 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/13_Add_Date_Integer_and_Logical_Data.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/13_Add_Date_Integer_and_Logical_Data.md @@ -36,7 +36,7 @@ record, folder *Previous cell output:* ```output -(, +(, ) ``` @@ -109,7 +109,7 @@ print(f"Built in Closed Chamber?: {'Yes' if closed_chamber.value else 'No'}") *Previous cell output:* ```output Date of Beam Profile Diagnostic: Jul 12 2020 -Date of Build: Apr 09 2025 +Date of Build: Apr 24 2025 Maximum Number of Layers: 5 Built in Closed Chamber?: Yes ``` \ No newline at end of file diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/15_Use_Exporters_for_FEA_Export.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/15_Use_Exporters_for_FEA_Export.md index d0276452af..865c8e49df 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/15_Use_Exporters_for_FEA_Export.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/15_Use_Exporters_for_FEA_Export.md @@ -93,7 +93,7 @@ print(material_card) **Model Type: Linear, temperature-dependent, isotropic, thermal, plastic **Unit System: SI (Consistent) **Export User: ANSYS\mi-sw-admin -**Export DateTime: 2025-04-09T06:46:18.5314229-04:00 +**Export DateTime: 2025-04-24T18:55:54.3242472-04:00 **Database Name: MI Training **Table Name: Design Data **Material Record History Id: 20673 diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/16_Link_Records.md b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/16_Link_Records.md index 2c558b8709..73ee617c07 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/16_Link_Records.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/samples/streamlined/16_Link_Records.md @@ -51,7 +51,7 @@ for link_group, records in rec.links.items(): Link group "MaterialUniverse" contains links to the following records: Link group "Smart Link to MaterialUniverse" contains links to the following records: -Alumino silicate - 1720, Lithium aluminosilicate, Barium silicate, Soda barium glass, Alumino silicate - 1723 +Lithium aluminosilicate, Alumino silicate - 1723, Barium silicate, Soda barium glass, Alumino silicate - 1720 ``` ## Static links A static link can be created between two existing records, including cross-database. @@ -92,7 +92,7 @@ for link_group, records in rec.links.items(): Link group "MaterialUniverse" contains links to the following records: Soda barium glass Link group "Smart Link to MaterialUniverse" contains links to the following records: -Alumino silicate - 1720, Alumino silicate - 1723, Barium silicate, Soda barium glass, Lithium aluminosilicate +Alumino silicate - 1720, Barium silicate, Lithium aluminosilicate, Alumino silicate - 1723, Soda barium glass ``` ## Associated Records Associated Records are a way of traversing tabular links multiple steps at a time. This example finds all materials diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/toc.yml b/2025R2/scripting-toolkit-dev-portal-25r2/toc.yml index 4cec196972..1b25fe7b9f 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/toc.yml +++ b/2025R2/scripting-toolkit-dev-portal-25r2/toc.yml @@ -60,12 +60,10 @@ href: samples/streamlined/16_Link_Records.md - name: Layouts href: samples/streamlined/17_Layouts.md - - name: Logging - href: samples/streamlined/18_Logging.md - name: RecordLists and MI Scripting Toolkit - href: samples/streamlined/19_Record_Lists_Interoperability.md + href: samples/streamlined/18_Record_Lists_Interoperability.md - name: JobQueue and MI Scripting Toolkit - href: samples/streamlined/20_Job_Queue_Interoperability.md + href: samples/streamlined/19_Job_Queue_Interoperability.md - name: Data analytics notebooks items: - name: Create scatter plots diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/authentication.md b/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/authentication.md index 3010b3a12d..aca67d79e5 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/authentication.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/authentication.md @@ -44,20 +44,17 @@ To use autologon with MI Scripting Toolkit your Granta MI server must be configu When scheduling scripts to run periodically in a Windows environment, the Task Scheduler is commonly used. It can be configured to set both the timing of the execution and the identity that the script runs as. -The screenshot below shows a typical Scheduled Task configuration, which has been set to run as a specified identity. In -this case, the script runs as `python_user`. Clicking **OK** displays a password prompt to enter the password for that -user, which is then stored securely as part of the configuration. When the task is executed, the script is run as -`python_user`, and so that identity is used to authenticate with Granta MI securely. +A Scheduled Task is typically configured to run as a stored identity. The password for the identity is stored as part of +the configuration, and when the task is executed, the script is run as that identity. This allows the Python script to +authenticate securely with Granta MI. -!["Create Task" options, with the task configured to run as "python_user", and "Run whether user is logged on or -not" selected.](_static/create_task.png) +Additional configuration is available in the *Triggers* and *Actions* tabs. -The *Triggers* tab is used to configure when the script executes. Generally this is specified in terms of the day of -the week and the time. +*Triggers* define when the script executes. Generally this is specified in terms of the day of the week and the time. -The *Actions* tab is used to describe the task itself, which in this case is the execution of a specific executable. In -Windows, the executable is typically available either with `py` or `python`. If these are not available, specify the -full path to the executable (accessible in Python by running `sys.executable`). +*Actions* define the task itself, which for Python scripts is the execution of a specific executable. In Windows, the +Python executable is typically available either with `py` or `python`. If these are not available, specify the full +path to the executable (accessible in Python by running `sys.executable`). Some additional recommendations: diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/index.md b/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/index.md index a22fd98bec..24123ab488 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/index.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/index.md @@ -2,15 +2,12 @@
-![|project| communicates to Granta MI via a SOAP API](_static/architecture.png) - ## Introduction MI Scripting Toolkit is a Python package that connects to your Granta MI application server (MI Server) via the Service Layer using -the SOAP API. The package consists of the Streamlined API, the Foundation API, and C++ libraries, as shown in the -diagram below. +the SOAP API. The package consists of the Streamlined API, the Foundation API, and C++ libraries. This user guide focuses on the Streamlined API. It provides guidance and best practice on how to develop scripts and applications that interact with Granta MI during their operation. diff --git a/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/streamlined_api.md b/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/streamlined_api.md index 7e8452a8ef..c903472fed 100644 --- a/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/streamlined_api.md +++ b/2025R2/scripting-toolkit-dev-portal-25r2/user_guide/streamlined_api.md @@ -10,9 +10,9 @@ logical components are described in the sections below: ## Session object -The [Session](../api/session.md#session-level) section primarily documents the [`Session`](../api/session.md#GRANTA_MIScriptingToolkit.granta.mi.Session) class. The [`Session`](../api/session.md#GRANTA_MIScriptingToolkit.granta.mi.Session) class is -instantiated by specifying Granta MI connection information, and the returned object represents a connection to the -server. It acts as the root object from which most other Streamlined API objects are spawned, and is typically used to: +The [Session](../api/session.md) section documents the [`Session`](../api/session.md#GRANTA_MIScriptingToolkit.granta.mi.Session) class. The [`Session`](../api/session.md#GRANTA_MIScriptingToolkit.granta.mi.Session) class is instantiated by +specifying Granta MI connection information, and the returned object represents a connection to the server. It acts as +the root object from which most other Streamlined API objects are spawned, and is typically used to: * Get [`Database`](../api/database.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Database) objects, which can be used to access [`Table`](../api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table) and [`Record`](../api/record.md#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record) objects. * Perform text searches across all records on the server with the [`Session.search_for_records_by_text()`](../api/session.md#GRANTA_MIScriptingToolkit.granta.mi.Session.search_for_records_by_text) and @@ -26,10 +26,10 @@ and tables. ## Database and table classes -The [Database](../api/database.md#db-level) section documents the [`Database`](../api/database.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Database) class, which represents Granta MI databases. +The [Database](../api/database.md) section documents the [`Database`](../api/database.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Database) class, which represents Granta MI databases. [`Database`](../api/database.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Database) objects are typically obtained by using the [`Session.get_db()`](../api/session.md#GRANTA_MIScriptingToolkit.granta.mi.Session.get_db) method. -The [Table](../api/table.md#table-level) section documents [`Table`](../api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table) class, which represents tables on the Granta MI server. +The [Table](../api/table.md) section documents [`Table`](../api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table) class, which represents tables on the Granta MI server. [`Table`](../api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table) objects are typically obtained by using the [`Database.get_table()`](../api/database.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Database.get_table) method. [`Database`](../api/database.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Database) and [`Table`](../api/table.md#GRANTA_MIScriptingToolkit.granta.mi_tree_classes.Table) objects are used to: @@ -44,7 +44,7 @@ The [Table](../api/table.md#table-level) section documents [`Table`](../api/tabl ## Record classes -The [Record](../api/record.md#record-level) section documents the [`Record`](../api/record.md#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record) class, which represents a record on the Granta MI server. +The [Record](../api/record.md) section documents the [`Record`](../api/record.md#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record) class, which represents a record on the Granta MI server. [`Record`](../api/record.md#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record) objects are used to: * Access and modify data stored in attributes via the [`Record.attributes`](../api/record.md#GRANTA_MIScriptingToolkit.granta.mi_record_classes.Record.attributes) dictionary. @@ -56,11 +56,11 @@ The [Record](../api/record.md#record-level) section documents the [`Record`](../ ## Attribute definition classes -The [Attribute definitions](../api/attribute-definitions.md#attribute-defs) section documents the [`AttributeDefinition`](../api/attribute-definitions.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.AttributeDefinition) class and all sub-classes. These classes -represent the *definition* of an attribute on a Granta MI server, as opposed to an instance of an attribute which -contains data. They are not associated with a particular record, only with the table that they are defined in. -[`AttributeDefinition`](../api/attribute-definitions.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.AttributeDefinition) classes can be used to access the attribute name, attribute unit, and additional -schema-level configuration based on the type of the attribute. +The [Attribute definitions](../api/attribute-definitions.md) section documents the [`AttributeDefinition`](../api/attribute-definitions.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.AttributeDefinition) class and all sub-classes. +These classes represent the *definition* of an attribute on a Granta MI server, as opposed to an instance of an +attribute which contains data. They are not associated with a particular record, only with the table that they are +defined in. [`AttributeDefinition`](../api/attribute-definitions.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.AttributeDefinition) classes can be used to access the attribute name, attribute unit, and +additional schema-level configuration based on the type of the attribute. The [`AttributeDefinition`](../api/attribute-definitions.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.AttributeDefinition) class is subclassed according to the hierarchy described below: @@ -89,7 +89,7 @@ place of [`AttributeDefinition`](../api/attribute-definitions.md#GRANTA_MIScript ## Attribute classes -The [Attribute values](../api/attribute-values.md#attribute-vals) section documents the +The [Attribute values](../api/attribute-values.md) section documents the [`AttributeValue`](../api/attribute-values.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_value_classes.AttributeValue) class and all sub-classes. These classes are analogous to the attribute definition classes, but represent attribute *values*. They are associated with both the table and record that they relate to. In addition to being able to access the attribute name and attribute @@ -122,7 +122,7 @@ the hierarchy described below: ## Sub-attribute classes -The [Schema and supporting items](../api/supporting.md#sub-attribute-level) section documents classes that are used by attribute objects but are not attributes +The [Schema and supporting items](../api/supporting.md) section documents classes that are used by attribute objects but are not attributes themselves. This includes: * The [`ParameterDefinition`](../api/supporting.md#GRANTA_MIScriptingToolkit.granta.mi_attribute_classes.ParameterDefinition) section, which documents the classes used to describe parameters.