BUG: The Z spacing was set using thickness

This addresses https://issues.itk.org/jira/browse/ITK-3527
According Dicom standard (DICOM PS3.6 2016b - Data Dictionary)
(0028, 0030) indicates physical X,Y spacing inside a slice;
(0018, 0088) indicates physical Z spacing between slices;
which above are also consistent with Dcom2iix software.
In current code, the zSpace is get from (0x0018,0x0050) which
actually is the thickness from which the signal is created,
not the separation of signal samplings.
This patch set resolves the problem by updating the Z get
spacing method by using (0018, 0088) when it is available.
If (0018, 0088) is not available, then the code reverts to
the previous behavior of using (0x0018,0x0050).

http://review.source.kitware.com/#/c/22094/
Hans J. Johnson
Uploaded patch set 1.Feb 22, 2017
Hans J. Johnson
Uploaded patch set 2.Feb 22, 2017
Kitware Build Robot
Patch Set 1: Verified+1 Build Successful: CDash filtered results: https://open.cdash.org/index.php?&project=Insight&filtercount=3&field1=buildname/string&compare1=63&value1=22094-1&field2=buildstarttime/date&compare2=83&value2=2015-03-01&field3=buildstarttime/date&compare3=84&value3=2029-01-01Feb 22, 2017
Francois Budin
Patch Set 2: Code-Review+1Feb 22, 2017
Hui Xie
Patch Set 2: Code-Review+1 Verified+1 Good. Verified. thank you for helping me committing.Feb 22, 2017
Kitware Build Robot
Patch Set 2: Verified+1 Build Successful: CDash filtered results: https://open.cdash.org/index.php?&project=Insight&filtercount=3&field1=buildname/string&compare1=63&value1=22094-2&field2=buildstarttime/date&compare2=83&value2=2015-03-01&field3=buildstarttime/date&compare3=84&value3=2029-01-01Feb 22, 2017
Hui Xie
Uploaded patch set 3.Feb 23, 2017
Kitware Build Robot
Patch Set 3: Verified+1 Build Successful: CDash filtered results: https://open.cdash.org/index.php?&project=Insight&filtercount=3&field1=buildname/string&compare1=63&value1=22094-3&field2=buildstarttime/date&compare2=83&value2=2015-03-01&field3=buildstarttime/date&compare3=84&value3=2029-01-01Feb 23, 2017
Matt McCormick
Patch Set 3: Code-Review-1 In GDCM, I believe we use the difference between Image Position Patient between the first two slices, which should probably be used here, too.Feb 24, 2017
Francois Budin
Patch Set 3: To keep track of the on-going conversation, here are the link to the relevant GDCM code that I included in the email I sent: https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/ThirdParty/GDCM/src/gdcm/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx#L163-L279Feb 24, 2017
Hui Xie
Patch Set 3: It looks that the GDCM code still not handle the Mosaic format of Siemens. Does anyone know whether the GDCM code passed the test case of Mosaic of Siemens?Feb 25, 2017
Hui Xie
Patch Set 3: Thank all of your contribution on this bug fixing. Basing on your contribution, I summarize my initial thinking below: 1 use (0020, 0032) Image Position (Patient) of type 1C is a better choice than (0018, 0088) of type 3; 2 when (0020,0032) is absent as the prerequisite (0008,9007) and (0008,9206) are not met, we may try to get (0018, 0088); if failed again, throw out an exception; 3 current itk::DCMTKFileReader is a container class of one dicm header file, which can not includes 2 frames, is not a good place to contain GetZSpace() method; we need to put it into a higher class; Where is this higher class? Welcome your suggestion. 4 GetZSpace should have 2 input parameter: 2 adjacent frame header files; 5 2 adjacent frame headers should filter from general slice interleave, volume interleave, or mosaic format, which needs extra work to adapt; 6 GetZSpace should be low-cost simple property-getting method, how to reduce the extra cost of get 2 adjacent frame headers is worth further designing and considering;Feb 25, 2017
Matt McCormick
Patch Set 3: +1 for better typed DICOM <-> ITK conversion. That path was started here: https://github.com/KitwareMedical/ITKDICOM but it will require some work.Feb 26, 2017
Hui Xie
Patch Set 3: A Technical Discussion Summary of DCMTKFileReader::GetSpacing() Feb 28th, 2017 Yesterday My professor Johnson discussed with me about the further work of GetSpacing(). As this spring semester I have other tasks, I will not have time enough to contribute on the reconstruction of GetSpacing. For the reconstruction of GetSpacing(), basing from the important and invaluable contribution from Steve, my immature thinking is: 1	referencing GDCM code and using the difference between (0020, 0032) Image Position (Patient) of adjacent 2 frames is relatedly simply in concept; 2	Under the hood of the above idea, how to find the adjacent 2 frames is the real challenge and needs a lot of work, as it involves to analyze various vendors’ Dicom format, for example, Siemens’ mosaic, slice interleave, or volume interleave etc; 3	In DWIConvert module, this reconstruction involves business logic reconstruction of DWIDICOMConverterBase and its derived classes; In other words, we need to redesign the order of getting Dicom properties data. 4	In 3D Slicer, it also involves an architecture design about how to design various Dicom vendors’ plugins. If we consider the plugins only for GetSpacing(), it is a little myopic. We need to think it in a broader view of getting Dicom data logic to design the Dicom plugins. Like Steve has said, DWI and FMR also need to consider together. In the communication with Steve, I always feel your suggestions are very helpful and encouraging. I like your style very much. Steve, you are a great leader. I believe that a lot of people like to cooperate and follow with you. If this summer break I have time, I would like to continue to cooperate with you on possible work. Now I summarize the previous technical discussion in the historical order for someone to refer in the future. Some of important discussion below are in email form which was not embedded in the web e-flow. I copied them into this document for future reference, which is precious asset for the betterment of ITK. Issue was submitted and some tries was discussing: https://github.com/BRAINSia/BRAINSTools/issues/334 ITK Code modification discussion on http://review.source.kitware.com/#/c/22094/ Felix Navarro on Feb 07th, 2017: Dear developers, I've found an issue regarding slice thickness and slice separation using DWIconvert. I've posted it on Feb 7th on slicer user's forum (link) I copy my analysis here: This is the report: I'm testing the conversion from DICOM to nifti using DWIConvert. You can download these dicom images from the TCIA, Ivy GAP collection, patient W2, series 500 using the TCIA explorer module or using the GUI provided by TCIA's web. Dicom tags related to geometrical aspects: /(0018,0050) Slice Thickness 5.000000 (0018,0088) Spacing Between Slices 6.000000 (0020,0037) Image Orientation (Patient) 0.996604\0.0823383\0-0.0823383\0.996604\0/ This is the conversion sentence: c:>slicer --launch DWIConvert --conversionMode DicomToFSL --outputVolume ADCSlicer.nii --inputDicomDirectory C:\Temp\W2_500_DICOM --outputDirectory ./ --echo >> ConversionSlicer.log This is the important content of ConversionSlicer.log file: /=================== this->m_SlicesPerVolume:25 Dicom images are ordered in a volume interleaving way. ImageOrientationPatient (0020:0037): LPS Orientation Matrix 0.996604 -0.0823383 0 0.0823383 0.996604 -0 0 0 0.999999 this->m_SpacingMatrix 0.9375 0 0 0 0.9375 0 0 0 5 NRRDSpaceDirection 0.934316 -0.0771922 0 0.0771922 0.934316 0 0 0 5 Slice 0: -109.284 -161.358 -82.5368 Slice 1: -109.284 -161.358 -76.5368 Slice order is IS Number of Slices: 25 Number of Volume: 1 Number of Slices in each volume: 25 B-value: 1000; diffusion direction: 0, 0, 0 Scale Factor for Multiple BValues: 0 -- sqrt( 1000 / 1000 ) = 1/ The first thing that catches my attention is that the pixel spacing is 5 mm instead of 6 mm which is the true IS spacing among the centers of voxels in adjacent slices. I have converted these files using dcm2niix also: dcm2niix -f ADCdcm2niix -o ./ C:\Temp\W2_500_DICOM which reports: / .... Slice thickness (mm): 5.000000 Slice spacing (mm): 6.000000 Image columns: 256 Image rows: 256 Voxel size x (mm): 0.9375 Voxel size y (mm): 0.9375 .... / If you load both volumes on slicer the volume converted with DWIConvert appears upside down and you cannot superpose them because regions do not match. If your make the conversion using DWIConvert with two steps,DicomToNrrd and then NrrdToFSL, then you get the volume correctly oriented but clearly compressed. Changing the z pixel spacing from 5 to 6 mm solves this issue. Taking this Z pixel spacing mismatch into account I draw a labelmap using that 2-step DWIConverted volume as master volume, then I save that labelmap using nii format and try to map it over the other one using the information provided in the saved file with a R script. Qaternions saved (b,c,d): (0,0, -0.9991508) Qform (ROI over 2 steps DWIconverted volume) : [,1] [,2] [,3] [,4] [1,] -0.93431626 0.07719193 0 109.2840 [2,] -0.07719193 -0.93431626 0 161.3580 [3,] 0.00000000 0.00000000 5 -82.5368 [4,] 0.00000000 0.00000000 0 1.0000 If I fix the position [3,3] changing its value from 5 to 6, the modified positions of the ROI using qform(ADCdcm2niix)^-1*qform(ROIover2StepsDWIConverted) match perfectly over the volume converted with dcm2niix. I'm going to perform further investigations, if I find something interesting I'll inform you. Steve Pieper on Feb 7th, 2017: See this related bug report that includes a link to phantom data: http://na-mic.org/Mantis/view.php?id=3867 Also see slicer-users thread here http://massmail.spl.harvard.edu/public-archives/slicer-users/2017/011619.html Hui Xie on Feb 9th, 2017: Hi, Felix, Thank you for pointing out this bug. I initially located this bug: In ITKv4/Modules/IO/DCMTK/src/itkDCMTKFileReader.cxx Line 1350 to Line 1355: if(subSequence.GetElementDS(0x0028,0x0030,2,_spacing,false) == EXIT_SUCCESS && subSequence.GetElementDS(0x0018,0x0050,1,&_spacing[2]) == EXIT_SUCCESS) { spacing[0] = _spacing[1]; spacing[1] = _spacing[0]; spacing[2] = _spacing[2]; Maybe 0x0050 above should be 0088. Or maybe it is about space direction conversion. I need test with your original data to make sure. I went to https://public.cancerimagingarchive.net/ncia/externalLinks.jsf?collectionName=IvyGAP to try to get your data, but I can not find the series 500 data you mentioned. Would you please give me more in detail about where to get your test data? Or you may share the test data with me through Dropbox by my gmail<EMAIL_ADDRESS>Thanks, have a nice weekend, Hui Xie Steve Pieper on Feb 9th, 2017: Hi Hui - Be sure to always use the differences between Image Position Patient of adjacent slices to calculate the third spacing value and don't rely on the Spacing Between Slices (0018,0088, which is optional and often missing or incorrect). Here's a discussion from the ITK mailing list that may help: https://itk.org/pipermail/insight-users/2008-November/027903.html Also here's some example code from slicer that calculates the correct spacing values and then confirms that each adjacent pair of slices is within espilon of that spacing: https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/DICOMPlugins/DICOMScalarVolumePlugin.py#L195-L253 It's important to do this because itk::Image, nrrd, and nifti all require uniform slice spacing with no missing slices whereas a dicom series may be missing a slice (e.g. if a file is deleted by mistake). Hope that helps, Steve Hans Johnson on Feb 9th, 2017: I believe that the spacing being created is done deep in ITK itself.  DWIConvert does not directly compute this value, but rather uses the value returned by ITK. If there is a bug, it is likely in ITK itself. Steve Pieper on Feb 9th, 2017: Right - the issue is in the itk dcmtk image io which is used in DWIConvert. Hui Xie on Feb 9th, 2017: Thank you very much, Pieper. After I read the link https://itk.org/pipermail/insight-users/2008-November/027903.html you gave, I find that 0018,0088 is a "big hollow" full of ambiguity and misinterpretation. This is why the int DCMTKFileReader::GetSpacing(double * const spacing) const writes so coiling like below. I plan not to change ITK code, let me to have a look whether there is another way to help Felix solve this bug. Thank Steve Pieper very much. I will follow your suggestion of "use the differences between Image Position Patient of adjacent slices to calculate the third spacing value" to modify ITK code: int DCMTKFileReader::GetSpacing(double * const spacing) const Hui Xie on Feb 18th, 2017: Today I analyzed the latest code of Dcm2niix from Github: 1 it directly uses (0028, 0030) to get physical X,Y spacing inside a slice; 2 it directly uses(0018, 0088) to get physical Z spacing between slices; 3 it directly uses (0018, 0050) go get slice thickness; The "directly"s above mean there is no other logic judgement to get these values, just plainly do it. It looks that Dcm2niix is not so complex comparing with ITK::DCMTKFileReader::GetSpacing(). Can we believe the judgement of Dcm2niix? Current ITK:: DCMTKFileReader has not getThickness() method, BRAINSTools just directly use zSpace as thickness. Do we need to add a getThickness() method in ITK::DCMTKFileReader? Hans Johnson on Feb 18th,2017: Thickness is not important to us.  It is not a relevant measure for our DWI work.  Slice spacing is important, but thickness is not. Hui Xie on Feb 21st, 2017: This morning, I analyzed the header file structure of FSL(NifTi). In the 348-bytes header of NifTi, there is no place to store thickness information. And 348 bytes which is already occupied compactly leave no space for private information extension. In another words, you will loss thickness information from Dicom to FSL, or from Nrrd to FSL. I will not store thickness into or read thickness from FSL file in our DWIConvert. Hans Johnson on Feb 22nd, 2017: Change subject: BUG: The Z spacing was set using thickness ...................................................................... BUG: The Z spacing was set using thickness This addresses https://issues.itk.org/jira/browse/ITK-3527 According Dicom standard (DICOM PS3.6 2016b - Data Dictionary) (0028, 0030) indicates physical X,Y spacing inside a slice; (0018, 0088) indicates physical Z spacing between slices; which above are also consistent with Dcom2iix software. In current code, the zSpace is get from (0x0018,0x0050) which actually is the thickness from which the signal is created, not the separation of signal samplings. This patch set resolves the problem by updating the Z get spacing method by using (0018, 0088) when it is available. If (0018, 0088) is not available, then the code reverts to the previous behavior of using (0x0018,0x0050). Change-Id: I1111c55dd9e15444411e31bd6f2f1e68b7cf7618 Steve Pieper on Feb 22nd, 2017: Hi Hui, Hans, Francois -  I don't think the current commit completely solves the problem. 1) SpacingBetweenSlices (0018,0088) is type 3, meaning it's optional in the standard.  I think in practice it is rarely given in files. 2) using the SliceThickness (0018,0050) is not a good fallback because it can be completely unrelated to spacing.  There are known cases where it is innaccurate. 3) The correct thing to do is calculate the spacing as the distance between adjacent slices using ImagePositionPatient because those fields are mandatory and are almost guaranteed to be correct in practice. In the emails about this topic I pointed to example code that implements the better solution. 4) I would suggest that any code that says 'punt' or picks an arbitrary number like 1.0 should be removed and an exception thrown instead.  I don't like the idea that ITK will silently read invalid data.  I we want a 'lax' mode that that should be a flag that the user explicitly sets. But the way I tried to log in through review.source.kitware.com but clicking the login link results in a page that simply says "Forbidden". Thanks for working on this, Steve Hui Xie on Feb 22nd, 2017: Hi, everyone, Good afternoon. Calculating z spacing as the distance between adjacent slices using ImagePositionPatient is every good idea in theory.  I tried the above idea  but failed. There are reason below: 1  Siemens Dicom has mosaic format which includes a collection of 2D slices in one slice. And Siemens has the private CSA header for each slice. It is difficult to get origin coordinates of adjacent slices except after we re-arrange the whole slices into normal order; 2  Philips has 2 cases: one header for each volume or one header for each slice; it leads use different method to get the original coordinates of adjacent slices;   3  In other words, Calculating z spacing as the distance between adjacent slices using ImagePositionPatient needs to consider the different scanner manufactory; The nonstandard of Dicom leads difficulties above to get the original coordinates of adjacent slices. And I reference the implement of Dcm2niix software. It just simply, directly use (0018, 0088) to get the zSpace, and it looks pretty good in many cases. Therefore I modified the ITK::itkDicomFileReader::GetSpace()  to first get (0018, 0088); if it fail, then try to get(0018, 0050) instead. If punt of 1 is not good, which is the historical implement of GetSpace(), I think I can modify it to throw out an exception.  Steve Pieper on Feb 23rd, 2017: Hi Hui -  Agreed - this is complicated in many ways.  Definitely the code predates your involvement so I certainly don't blame you for the 'punt' comments!  It's great if we can work together to implement good behavior in as many real world cases as possible. I also agree that there is a lot of vendor-specific interpretation required, particularly for DWI dicom.  I'm adding Andrey Fedorov to the cc list for this thread because for our QIICR project we are also working with DWI acquisitions and have been discussing how best to translate legacy acquisitions into a standard forms. A few comments: * Since the itkDCMTKFileReader can be used for any kind of DICOM, it should have robust behavior at estimating the spacing between slices.  As far as I know the code from Slicer and the GDCM reader represent the best practices for determining the spacing for a wide range of real world cases. * Vendor-specific DWI may come in many forms and these require custom overrides of the spacing for the reasons you discussed.  I think the DWIConvert code may be the right place to handle purely-DWI related calculations, but since multiframe and mosaic datasets may come up in fMRI or other acquisitions it probably makes the most sense to factor out the code that handles these cases and put it directly in the itkDCMKTFileReader. * Ultimately we may have improved functionality in DCMTK itself for handling some of these conversions.  It would be good to think about what API would be most helpful and work with the DCMTK developer community to see how it could be implemented. * Regarding the 'punt' comments in the code, yes, it would be great to convert those to exceptions so the application can warn the user of corrupt or otherwise non-standard data. Thanks again for your work on this, Steve Hui Xie on Feb 23rd, 2017: Hi, Steve, Good evening. Your consideration is from the comprehensive requirements of medical image reality,  and for excellence of our software system. I like this. OK. I will follow your suggestion to continue work on this to get the best solution. Thank you very much and best regards, Matt McCormick on Feb 24th, 2017: In GDCM, I believe we use the difference between Image Position Patient between the first two slices, which should probably be used here, too. Francois Budin on Feb 24th, 2017: To keep track of the on-going conversation, here are the link to the relevant GDCM code that I included in the email I sent: https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/ThirdParty/GDCM/src/gdcm/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx#L163-L279 Hui Xie on Feb 25th, 2017: It looks that the GDCM code still not handle the Mosaic format of Siemens. Does anyone know whether the GDCM code passed the test case of Mosaic of Siemens? Thank all of your contribution on this bug fixing. Basing on your contribution, I summarize my initial thinking below: 1 use (0020, 0032) Image Position (Patient) of type 1C is a better choice than (0018, 0088) of type 3; 2 when (0020,0032) is absent as the prerequisite (0008,9007) and (0008,9206) are not met, we may try to get (0018, 0088); if failed again, throw out an exception; 3 current itk::DCMTKFileReader is a container class of one dicm header file, which can not includes 2 frames, is not a good place to contain GetZSpace() method; we need to put it into a higher class; Where is this higher class? Welcome your suggestion. 4 GetZSpace should have 2 input parameter: 2 adjacent frame header files; 5 2 adjacent frame headers should filter from general slice interleave, volume interleave, or mosaic format, which needs extra work to adapt; 6 GetZSpace should be low-cost simple property-getting method, how to reduce the extra cost of get 2 adjacent frame headers is worth further designing and considering; Steve Pieper on Feb 25th, 2017: I'm pretty sure that gdcm never handled Siemens mosaic format. Hi Hui -  Thanks for your careful thoughts on this issue.  It will be good to get a nice architecture that will help all ITK users work with DICOM files more carefully. Your question in point 3 about the need for a higher class is a particularly important one.  The mapping from a collection of DICOM image instances to itk::Image instances is not always one-to-one.  I agree with you that a single frame image cannot properly know it's Z spacing; this can only be known calculated when there are multiple frames. It might be best to identify very specific use cases that will be supported and then throw exceptions if the constraints of those cases are not me. The following is a suggestion based on what is implemented in Slicer (in a very slicer-specific way, and not in native ITK code). 1) DICOM volumetric series --> itk::Image  (could be done in the DCMTK based reader) 1a) given a single filename of a dicom file, search the rest of the directory for files with the same SeriesInstanceUID (this is like itkGDCMImageSeriesFileNames) 1b) for a set of DICOM files of the same series, check that the geometry and other properties meet the assumptions of an itk::Image, meaning same pixel type, z direction vector is orthogonal to the scan plane, pixel spacings are uniform through entire volume, etc.  Basically any field that is an instance variable of itk::Image needs to be true for the entire PixelData. 1c) the mapping from DICOM frames to itk may have multiple interpretations, such as a vector PixelType for one image or a vector of images with a scalar pixel type (or combinations).  It should be possible for users to provide application-specific plugins that allow custom interpretations. 2) DICOM DWI --> nrrd or other DWI format (could be done in DWIConvert) 2a) provide plugins to 1c that know about specific DWI encodings from various vendors and scanner types into a unified generic representation of DWI of the appropriate image and pixel types. 2b) provide translations from the generic DWI into any of the supported export types (nrrd, nifti, etc). Hui Xie on Feb 25th, 2017: Hi, Steve, Good afternoon on Saturday. Thank you for your helpful suggestions in detail. 1  Your "given a single filename of a dicom file, search the rest of the directory for files with the same SeriesInstanceUID " is a wonderful and reality idea, although it lightly violates the object-oriented principle; I will consider this idea in my implementation. 2  Yes. I agree with you that checking the uniformity of zSpacing in entire volume is very important; this should be considered in our implementation;  3  Current major challenge is about how to get correct adjacent frames because of the various vendors; Plugin is a good choice for Slicer. For DWIConverter, this is a inheritance class design problem; 4  I am thinking another problem: Does DWIConverter::GetSpacing need to execute  before rearranging pixel buffer data (this is status quo), or it may execute after rearranging pixel buffer data? The answer to this problem will lead a light-weight, or heavy-weight ITK::GetZSpacing(). If  DWIConverter::GetSpacing may execute after rearranging pixel buffer data, we will have clear frame order, then it will be very easy to get z Spacing from (0028, 0032) from adjacent frames. It think it is possible in theory; 5  I need some time to research in detail frame order mechanism of Siemens Mosaic format and Phillips.   By the way,  about my time on this work: I estimate that I only have 10 hours per week to invest in this work, as on April 22nd I will have a PhD qualification exam, and before it I need about one month to prepare it; And in March I also need to finish another ITK super resolution  project implementation. Thank you very much, have a nice new week, Hui Xie Matt McCormick on Feb 26th, 2017: for better typed DICOM <-> ITK conversion. That path was started here: https://github.com/KitwareMedical/ITKDICOM but it will require some work. Hui Xie on Feb 27th, 2017: As the modification of itk::itkDCMTKFileReader::GetSpacing for getting correct zSpace using use (0020, 0032) Image Position (Patient) needs to handle the frame order of various MR vendors, e.g. Siemens Mosaic format, this work, I guess, needs a lot of time. Maybe one month or 3 month, I don't know. Therefore, I implemented temporarily a bypass solution inside BRAINSTools named int DWIDICOMConverterBase::getDicomSpacing(double * const spacing) const.Feb 28, 2017
Hans J. Johnson
Uploaded patch set 4: Patch Set 3 was rebased.Jul 11, 2017
Kitware Build Robot
Patch Set 4: Verified+1 Build Successful: CDash filtered results: https://open.cdash.org/index.php?&project=Insight&filtercount=3&field1=buildname/string&compare1=63&value1=22094-4&field2=buildstarttime/date&compare2=83&value2=2015-03-01&field3=buildstarttime/date&compare3=84&value3=2029-01-01Jul 11, 2017
Matt McCormick
Patch Set 4: Follow-ups to this patch will also address: https://issues.itk.org/jira/browse/ITK-3554Jul 19, 2017
Hans J. Johnson
Uploaded patch set 5: Patch Set 4 was rebased.Feb 4, 2018
Hans J. Johnson
Patch Set 4: https://insightsoftwareconsortium.atlassian.net/browse/ITK-3554Feb 4, 2018
Kitware Build Robot
Patch Set 5: Verified+1 Build Successful: CDash filtered results: https://open.cdash.org/index.php?&project=Insight&filtercount=3&field1=buildname/string&compare1=63&value1=22094-5&field2=buildstarttime/date&compare2=83&value2=2015-03-01&field3=buildstarttime/date&compare3=84&value3=2029-01-01Feb 4, 2018

@malaterre Is there any chance that you would be willing to fix this PR?  It could really use an expert in the area to get it right.  We have been hacking as sub-par solutions for a long time.
I'd like to stay focused on other ITK improvements.
Thank you for your consideration.  Otherwise it will likely linger for a while longer.

@hjmjohnson As mentioned above, I find acceptable the solution where you simply remove the legacy code path with Slice Thickness.
Eg:
if(GetElementDS<double>(0x0018,0x0088,1,&_spacing[2], false) == EXIT_SUCCESS
       || GetElementDS<double>(0x0018,0x0050,1,&_spacing[2],false) == EXIT_SUCCESS)

should instead be simply:
if(GetElementDS<double>(0x0018,0x0088,1,&_spacing[2], false) == EXIT_SUCCESS)

That's an acceptable solution for now.

I will edit the PR per your suggestion @malaterre


The ability to use pr-agent on Github action using azure open ai

Please enhance the env configuration to use azure open ai, also please share an example to do so.
Thanks

https://github.com/Codium-ai/pr-agent/blob/main/Usage.md#azure

@mrT23 I have read the doc, but it said ".screte.toml" that is for python to execute or i execute from source code?
I want to use the Github action, which will be the "pr_agent.yaml" for the action. How it can be set there?
just put the same information as ".screte.toml" on the "pr_agent.yaml" under evn?

@veronicavero
If you want to use GitHub action, first read the relevant section of github action, in the same page.
It answers all the questions you raised.

All the best


Fix typo in types.rst

Summary
identifer -> identifier

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Add Unit Test & Github Action Workflow

This pull request includes unit tests for the gRPC plugin and fix issue can't convert to string with nested object
Please delete options that are not relevant.

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update
[x] Add unit tests

How Has This Been Tested?
Unit test coverage 97%
https://app.codecov.io/gh/minhhoangvn/jmeter-grpc-request

@huynhminhtan PTAL

Anh @minhhoangvn, thank you for your pull request.
Fixed deserialization for empty/nested object fields, prepared to support streaming, configured GitHub Actions workflow, and especially added unit test coverage > 97% beautiful! 🎉🎉🎉
Thanks a lot for this very interesting contribution. It has been merged into master.


Add Force Unit Convertor

I want to add a Force Unit Convertor to convert various units of force across them under JWOC'23.
This picture here describes the various units clearly: https://images.app.goo.gl/K9FNLV9uD2qKQsuMA

@zugzwang03 Go for it.

I would like to work on this under JWOC


[hi] Localize docs/reference/glossary/index.md to Hindi

This is a Feature Request

What would you like to be added
We need to localize glossary/index.md to Hindi.
Why is this needed
This page is needed for Netlify preview to work on dev-1.22-hi.1
Comments

The current working branch for hi localization work is dev-1.22-hi.1. Please make sure to open a PR against dev-1.22-hi.1.
For more info see Hindi localization progress tracking issue #29353
/language hi
/kind feature
/priority backlog

/triage accepted

/assign

So, currently there is not any reference folder in the docs directory, right?

So, do we have to just localise https://github.com/kubernetes/website/blob/main/content/en/docs/reference/glossary/index.md but just in Hindi?
Would like to know more so that I can get started.

@anubha-v-ardhan just tagged to let you know about the query above.

/assign

So, currently there is not any reference folder in the docs directory, right?

Yes, you can create the folder if it's not present. Tracking issue #29353's description has the steps mentioned to localize a page.
This issue is already assigned by @ashish-jaiswar, you can approach him if you wish to work together :)

Thank you @anubha-v-ardhan .  I will reach out to you for any query.

/close
fixed with #30652


playlist / queue fall out bugs + feedback

[ ] remove queue bottom bar on mobile refresh or when 0/0?

[ ] Watch Later's "Start Playing" problems.
Clear your Watch Later.
Refresh,
Add a video into an existing private list from a homepage tile.
:x: Click "Start Playing" in the toast --> nothing happened.
Refresh
"Add to queue" on any video tile, then close the player.
:x: "Watch later" on any video tile --> it included the previous item from the Q, and now my Watch Later has 2 items  ... we only clicked it once.

[ ] --non-blocker-- Minor reflow issues when changing dropdown value in medium layout

[ ] Playlist doesn't play if first item (maybe also affects nth item) is DMCA'd

I manually copied the large playlist from Tom's wallet, which included lbry://The-Matrix-Resurrections-(2021)#bb3cac2a46f8962c9d0fc84c6bf893711264c014 as the first entry.  When hitting "Play All", it showed the DMCA page rather than the playlist + skipping through the invalid item.

[ ] It's possible to accidentally include livestreams in the Q, causing odd behavior.

Add a regular video into the Q.
Open and play a livestream. It will close the Q player and start playing the livestream.
Go back to homepage. Noticed that the livestream actually added into the Q.

:x: The "Prev" button does not work.  The
:x: If you add another regular video in the Q, the "Next" button doesn't work while the livestream in playing.

Wanted to say "how about just allow livestreams in the Q and eventually playlists", but seems like there are more things to handle if we want to go that path.

[ ] :arrow_down: Handle super-long playlist names

[ ] In list (maybe just truncate and show full name in tooltip)
[ ] In "Add to xxx" context menu ... it currently overflows the screen.

Unfinished business from the PR:

[ ] Can't play directly from toast if there's only one entry in the list
[ ] Tip/Boost button not updated correctly
[ ] One more open comment in the PR.

Yeah, quite close to being fully functional (just the "next/prev" doesn't work as expected sometimes).

[ ] Show claim details, or at least bring back Tags?

The removal of claim details probably stemmed from the recent discussion to remove it (although I'd argue it still contains useful info like Languages), but tags seems still useful to retain?


Ingresses not loading for RKE1 downstream clusters on k8s 1.22.3 when HA local cluster is on k8s 1.18

Rancher Server Setup

Rancher version: v2.6-head e322f8f
Installation option (Docker install/Helm Chart): Helm Chart

If Helm Chart, Kubernetes Cluster and version (RKE1, RKE2, k3s, EKS, etc): RKE1, v1.18.20, 1.3.3-rc1

Proxy/Cert Details: Selfsigned

Information about the Cluster

Kubernetes version: v1.22.3-rancher1-1
Cluster Type (Local/Downstream): Downstream AWS/DO RKE1 node driver 1 worker, 1 etcd, 1 cp

Describe the bug
Ingress page is not loading in any of the downstream RKE1 and RKE2 clusters when the k8s version for these clusters is 1.22 and the local HA k8s version is on v1.18.20
To Reproduce

Install rancher server on RKE1 cluster with k8s selected as v1.18.20
Create a downstream RKE1 node driver/custom EC2 or DO on k8s v1.22.3-rancher1-1 and an imported RKE2 cluster version v1.22.3+rke2r1
Once the cluster is active, navigate to load balancer page from the v3 API

Result
ingresses.meta.k8s.io is not found. The following error is displayed in the page:
{
"baseType": "error",
"code": "NotFound",
"message": "the server could not find the requested resource (get ingresses.meta.k8s.io)",
"status": 404,
"type": "error"
}

Expected Result
Expected the ingresses to work on k8s 1.22 downstream clusters
Additional context

k8s local
Downstream K8s
Status

1.18.20
1.22.3
Issue seen

1.18.20
v1.21.6,v1.18.20
Issue not seen

1.22.3
v1.21.6,v1.18.20,1.22.3
Issue not seen

Verified on v2.6-head 77392a6

Installed rancher on HA server with k8s v1.22.4-rancher1-1
Created a downstream node driver AWS rke1 cluster 1 etcd+cp, 1 worker
Verified by creating a few ingresses and the ingresses are working


A short description of the bug

Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):

OS: [e.g. iOS]
Browser [e.g. chrome, safari]
Version [e.g. 22]

Additional context
Add any other context about the problem here.

@0958269050 please add some details about the bug you're seeing and reopen if required.


[r2.14-rocm-enhanced] Disable oneDnn ops when testing on ROCM

retest code-check please

retest gpu-pycpp please


What is the CORS-accessible way?

Great work! How can I use the job to render my own .ply data output by 3D GS?

I wonder as well.Since it's an important part for my graduation project.I want to know whether it can render my .ply model on my local mechine except by drug it directly to the web UI


How do I get tagged users?

How do I get tagged people on the photo from an InstagramMedia?
I am talking about users tagged on the photo, not hastags or mentions.

Planned for release in v3.7. Please follow progress in #158.


How can I import Blender specular value via glTF Assimp import?

Question
I created a textured sample cube in Blender and exported it as glTF. I am using Assimp from LWJGL 3.3.2 and it is working quite well and I managed to access faces, vertices, normals, as well as texture coordinates and the texture itself. However I am struggling to understand the material properties interface.
I managed to access the roughness and metallic factor but I can't see a way to access the specular value.
(import '[org.lwjgl.assimp Assimp AIMaterial AIMaterialProperty])
(import '[org.lwjgl PointerBuffer])

(def scene (Assimp/aiImportFile "etc/cube.gltf" Assimp/aiProcess_Triangulate))

(.mNumMaterials scene)
; 2
(def material (AIMaterial/create ^long (.get (.mMaterials scene) 0)))

(def properties (map #(AIMaterialProperty/create (.get (.mProperties material) %)) (range (.mNumProperties material))))

(map (fn [prop] (.dataString (.mKey prop))) properties)
; ("?mat.name" "$clr.diffuse" "$clr.base" "$tex.file" "$tex.uvwsrc" "$tex.mappingname" "$tex.mappingid" "$tex.mapmodeu"
; "$tex.mapmodev" "$tex.mappingfiltermag" "$tex.mappingfiltermin" "$tex.file" "$tex.uvwsrc" "$tex.mappingname"
; "$tex.mappingid" "$tex.mapmodeu" "$tex.mapmodev" "$tex.mappingfiltermag" "$tex.mappingfiltermin"
; "$mat.metallicFactor" "$mat.roughnessFactor" "$mat.shininess" "$clr.emissive" "$mat.twosided" "$mat.opacity"
; "$mat.gltf.alphaMode" "$mat.gltf.alphaCutoff" "$mat.shadingm")

(def p (PointerBuffer/allocateDirect 1))
(Assimp/aiGetMaterialProperty material Assimp/AI_MATKEY_ROUGHNESS_FACTOR 0 0 p)
; 0
(.getFloat (.mData (AIMaterialProperty/create ^long (.get p 0))))
; 0.3

(def p (PointerBuffer/allocateDirect 1))
(Assimp/aiGetMaterialProperty material Assimp/AI_MATKEY_METALLIC_FACTOR 0 0 p)
; 0
(.getFloat (.mData (AIMaterialProperty/create ^long (.get p 0))))
; 0.1

(def p (PointerBuffer/allocateDirect 1))
(Assimp/aiGetMaterialProperty material Assimp/AI_MATKEY_SPECULAR_FACTOR 0 0 p)
; -1

(def color (AIColor4D/create))
(Assimp/aiGetMaterialColor material Assimp/AI_MATKEY_COLOR_DIFFUSE Assimp/aiTextureType_NONE 0 color)
; 0
(Assimp/aiGetMaterialColor material Assimp/AI_MATKEY_COLOR_SPECULAR Assimp/aiTextureType_NONE 0 color)
; -1

In Blender the specular value is 0.2 and I can see the value 0.4 under "specularColorFactor" in the glTF file:
{
  "asset":{
    "generator":"Khronos glTF Blender I/O v3.6.27",
    "version":"2.0"
  },
  "extensionsUsed":[
    "KHR_materials_specular"
  ],
  "scene":0,
  "scenes":[
    {
      "name":"Scene",
      "nodes":[
        0
      ]
    }
  ],
  "nodes":[
    {
      "mesh":0,
      "name":"Cube"
    }
  ],
  "materials":[
    {
      "doubleSided":true,
      "extensions":{
        "KHR_materials_specular":{
          "specularColorFactor":[
            0.4000000059604644,
            0.4000000059604644,
            0.4000000059604644
          ]
        }
      },
      "name":"Material.002",
      "pbrMetallicRoughness":{
        "baseColorTexture":{
          "index":0
        },
        "metallicFactor":0.10000000149011612,
        "roughnessFactor":0.30000001192092896
      }
    }
  ],
  ...
}

I have tried to import the Blender file instead but that doesn't seem to expose texture coordinates and normal vectors (and maybe other entries).

Looks like it was reported at assimp/assimp.


How to do responsive Images?

I'm trying to do this:
const markdownStyles = {

    image: {
        flex: 1,
    }

}

Why do i need to specify width and height?
Sent from my Google Nexus 5X using FastHub

Nevermind, there was an error in my Markdown. Closing...


CDS plugin package overview

[!NOTE]
This is still work on progress

Proposed CDS plugin package table to list all plugins according to:

Name
Stack
Open Source (repo link)
Capabilities (according to plugin description)

Closing in favor of a simple markdown table (without Vue components)


Update response  models

This pull request updates the <dcp> object representation in the greeting response to match the RFC.
For absolute and relative expiry types, I have set these fields to the StringValue type for now. It appears that there is some custom serialization logic to handle other dates already. I think it would be good to update all of these dates and durations to use a custom Serde data format. I'm not aware of any crate that can handle the expected format for date/time and duration.
Do you think this would work best as a separate issue and pull request?

I think it would be good to update all of these dates and durations to use a custom Serde data format. I'm not aware of any crate that can handle the expected format for date/time and duration.

This would be a very good solution I think.
I wanted to have a date type (probably extend DateTime) that cleanly ser/de to and from ISO8601 formats and didn't find one at the time. Since this is a general enough requirement (type serialization to and from ISO8601 formats) do you think this should be its own crate in the long term? For now I think it's good to have it in this repo.

Sounds good. For DateTime and Duration, it might make sense to contribute back to quick-xml because they are part of the XML spec. I'm not sure if they would consider (de)serializers like that in scope for the project but we could see.
As for phone numbers and country codes, that probably makes sense to keep as part of this library.

Ok, thanks for checking with the quick-xml project and for the changes in this PR. I will merge it soon.

Having written some serde data format implementations, I don't think that abstraction fits very well. The most attractive solution might be to implement some more alternative serializers/deserializers (that is, a module containing serialize and deserialize functions) in chrono, which already collects these here. However, given that chrono is not very actively maintained currently, this direction will probably not make a lot of sense.
Given that these are just modules with functions in them, it doesn't really matter where these live, so it'd probably make sense to implement them in this crate until/unless there's a response in https://github.com/tafia/quick-xml/issues/339 which would probably make more sense.

@djc which abstraction are you referring to? The general approach of splitting the de/serializers into a separate crate?

The abstraction of a "custom Serde data format". A serde data format, at least as referred to on the page you linked to, means a Serializer and/or Deserializer implementation (for something like JSON, CBOR, etc).

Ah, ok. Yeah that makes sense. The serde model/architecture still confuses me sometimes.


ui.tests Docker image does not build OOTB

Concerns ui.tests submodule build in AEMaaCS pipeline
Expected Behaviour
When built in AEMaaCS pipeline, ui.tests docker image should build OOTB
Actual Behaviour
Docker build fails, complaining about missing dependencies (ex. Python runtime)
Error excerpt:
[...]
gyp ERR! stack Error: Could not find any Python installation to use
[...]

Reproduce Scenario (including but not limited to)
Steps to Reproduce
From fresh clone:
cd src/main/archetype/ui.tests
docker build .

Wait for build to fail...
Platform and Version
Any platform, latest master
Logs taken while reproducing problem
Step 17/20 : RUN npm install
 ---> Running in 8142e9d7a1c7
npm WARN deprecated<EMAIL_ADDRESS>request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142
npm WARN deprecated<EMAIL_ADDRESS>Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)
npm WARN deprecated<EMAIL_ADDRESS>Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)
npm WARN deprecated<EMAIL_ADDRESS>"Please update to latest v2.3 or v2.2"

><EMAIL_ADDRESS>install /usr/src/app/node_modules/fibers
> node build.js || nodejs build.js

gyp ERR! find Python
gyp ERR! find Python Python is not set from command line or npm configuration
gyp ERR! find Python Python is not set from environment variable PYTHON
gyp ERR! find Python checking if "python" can be used
gyp ERR! find Python - "python" is not in PATH or produced an error
gyp ERR! find Python checking if "python2" can be used
gyp ERR! find Python - "python2" is not in PATH or produced an error
gyp ERR! find Python checking if "python3" can be used
gyp ERR! find Python - "python3" is not in PATH or produced an error
gyp ERR! find Python
gyp ERR! find Python **********************************************************
gyp ERR! find Python You need to install the latest version of Python.
gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
gyp ERR! find Python you can try one of the following options:
gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
gyp ERR! find Python   (accepted by both node-gyp and npm)
gyp ERR! find Python - Set the environment variable PYTHON
gyp ERR! find Python - Set the npm configuration variable python:
gyp ERR! find Python   npm config set python "/path/to/pythonexecutable"
gyp ERR! find Python For more information consult the documentation at:
gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
gyp ERR! find Python **********************************************************
gyp ERR! find Python
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Python installation to use
gyp ERR! stack     at PythonFinder.fail (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:307:47)
gyp ERR! stack     at PythonFinder.runChecks (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:136:21)
gyp ERR! stack     at PythonFinder.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:179:16)
gyp ERR! stack     at PythonFinder.execFileCallback (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:271:16)
gyp ERR! stack     at exithandler (child_process.js:315:5)
gyp ERR! stack     at ChildProcess.errorhandler (child_process.js:327:5)
gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! stack     at onErrorNT (internal/child_process.js:465:16)
gyp ERR! stack     at processTicksAndRejections (internal/process/task_queues.js:80:21)
gyp ERR! System Linux 4.19.121-linuxkit
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--release"
gyp ERR! cwd /usr/src/app/node_modules/fibers
gyp ERR! node -v v14.15.1
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok
node-gyp exited with code: 1
Please make sure you are using a supported platform and node version. If you
would like to compile fibers on this machine please make sure you have setup your
build environment--
Windows + OS X instructions here: https://github.com/nodejs/node-gyp
Ubuntu users please run: `sudo apt-get install g++ build-essential`
RHEL users please run: `yum install gcc-c++` and `yum groupinstall 'Development Tools'`
Alpine users please run: `sudo apk add python make g++`
gyp ERR! find Python
gyp ERR! find Python Python is not set from command line or npm configuration
gyp ERR! find Python Python is not set from environment variable PYTHON
gyp ERR! find Python checking if "python" can be used
gyp ERR! find Python - "python" is not in PATH or produced an error
gyp ERR! find Python checking if "python2" can be used
gyp ERR! find Python - "python2" is not in PATH or produced an error
gyp ERR! find Python checking if "python3" can be used
gyp ERR! find Python - "python3" is not in PATH or produced an error
gyp ERR! find Python
gyp ERR! find Python **********************************************************
gyp ERR! find Python You need to install the latest version of Python.
gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
gyp ERR! find Python you can try one of the following options:
gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
gyp ERR! find Python   (accepted by both node-gyp and npm)
gyp ERR! find Python - Set the environment variable PYTHON
gyp ERR! find Python - Set the npm configuration variable python:
gyp ERR! find Python   npm config set python "/path/to/pythonexecutable"
gyp ERR! find Python For more information consult the documentation at:
gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
gyp ERR! find Python **********************************************************
gyp ERR! find Python
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Python installation to use
gyp ERR! stack     at PythonFinder.fail (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:307:47)
gyp ERR! stack     at PythonFinder.runChecks (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:136:21)
gyp ERR! stack     at PythonFinder.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:179:16)
gyp ERR! stack     at PythonFinder.execFileCallback (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:271:16)
gyp ERR! stack     at exithandler (child_process.js:315:5)
gyp ERR! stack     at ChildProcess.errorhandler (child_process.js:327:5)
gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! stack     at onErrorNT (internal/child_process.js:465:16)
gyp ERR! stack     at processTicksAndRejections (internal/process/task_queues.js:80:21)
gyp ERR! System Linux 4.19.121-linuxkit
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--release"
gyp ERR! cwd /usr/src/app/node_modules/fibers
gyp ERR! node -v v14.15.1
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok
node-gyp exited with code: 1
Please make sure you are using a supported platform and node version. If you
would like to compile fibers on this machine please make sure you have setup your
build environment--
Windows + OS X instructions here: https://github.com/nodejs/node-gyp
Ubuntu users please run: `sudo apt-get install g++ build-essential`
RHEL users please run: `yum install gcc-c++` and `yum groupinstall 'Development Tools'`
Alpine users please run: `sudo apk add python make g++`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY<EMAIL_ADDRESS>(node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for<EMAIL_ADDRESS>wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>No repository field.
npm WARN<EMAIL_ADDRESS>No license field.

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>install: `node build.js || nodejs build.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2021-01-12T16_44_16_286Z-debug.log

fixed in https://github.com/adobe/aem-project-archetype/commit/19e083a0709a95720a0b0c38d6ff483e42b562aa


error recovering Fock matrix after COSMO calculation

The following script successfully prints out the exchange and Coulomb matrices observed after a Hartree-Fock + COSMO calculation, but fails to do so for the Fock matrix:
from pyscf import M
from pyscf.solvent import DDCOSMO

mol = M(atom="H 0. 0. 0.; H 0. 0. 1.")
mf = mol.RHF()

cosmo_mf = DDCOSMO(mf)
cosmo_mf.with_solvent.eps = 78.4

cosmo_mf.run()

# this works
print(cosmo_mf.get_k())
print(cosmo_mf.get_j())
# this does not work
print(cosmo_mf.get_fock())

The output is:
converged SCF energy = -1.06630467027465
[[1.03648882 0.83831468]
 [0.83831468 1.03648882]]
[[1.25044062 0.62436288]
 [0.62436288 1.25044062]]
Traceback (most recent call last):
  File "/home/konst/test_folder/pyscf/solvation/minimal_example.py", line 16, in <module>
    print(cosmo_mf.get_fock())
          ^^^^^^^^^^^^^^^^^^^
  File "/home/konst/miniconda3/lib/python3.12/site-packages/pyscf/solvent/_attach_solvent.py", line 100, in get_fock
    vhf = self.get_veff(self.mol, dm)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/konst/miniconda3/lib/python3.12/site-packages/pyscf/solvent/_attach_solvent.py", line 85, in get_veff
    with_solvent.e, with_solvent.v = with_solvent.kernel(dm)
                                     ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/konst/miniconda3/lib/python3.12/site-packages/pyscf/solvent/ddcosmo.py", line 773, in kernel
    self.e, self.v = self._get_vind(dm)
                     ^^^^^^^^^^^^^^^^^^
  File "/home/konst/miniconda3/lib/python3.12/site-packages/pyscf/solvent/ddcosmo.py", line 800, in _get_vind
    dm = dm[0] + dm[1]
         ~~^^^
TypeError: 'NoneType' object is not subscriptable

It can be solved by passing the dm to the get_fock function like this. print(cosmo_mf.get_fock(dm=cosmo_mf.make_rdm1()))

Thank you for the quick reply! It should do as a temporary solution for now.

Thanks both. If these seems like a bug, please feel free to submit a PR.

Sure.
I will add this.


Added a few rebuses

Associated Issue: #121
Added 3 new rebuses for War of the worlds, Dead Sea,  and Game of thrones

change 1
change 2

Pull Request Test Coverage Report for Build 799

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 87.143%

Totals

Change from base Build 514:
0.0%

Covered Lines:
158

Relevant Lines:
180

💛  - Coveralls


Sync the Italian Readme_it.md file so that the table of contents point to the translated lessons

Claimed issue

Submitted a PR https://github.com/rcallaby/Learn-Git/pull/649

Yes, but you didn't translate the titles of the lessons into Italian. You need to do that before you update the readme file.


record app makes individual calls to each entry in related pure and binary assocation tables

Here is the quick summary of @RFSH's investigation:
For checking 412, we used to pass the tuples object to the delete function, so the delete always needed the tuples object. For the association tables, since we're not actually deleteing from the same table, we needed to do another read to get the actual tuple that we want to delete.
we can easily just remove that logic of getting the tuples and passing them to delete function.

I pushed a fix for this to master.


[TA] Prepare Nov patch release

Prepare Nov patch release for Text Analytics

API change check
API changes are not detected in this pull request.


feat(styles): modify typography desktop style

the icon in the text-field gets now font-size of 14 and not 16 because nothing is set on it. All of the snap shor width (and some of the also the height) were change - that strange that it happens - it isn't related to the change you made...

text field's icon size was never set - #655
it must have something to do with the change I made here, I ran ui tests in parallel on main

@rachelbt font-size and line-height both affect block spacing
https://user-images.githubusercontent.com/15140652/188968708-78a2ac71-0d2a-4226-9ade-007d36317e1c.mov


how to translate all texts

Instead of real-time translation

Can't be done.
Unlike a lot of small-time game engines often used by game engines such as RPG Maker, Kirikiri, and what-have-you, the Unity Engine, being a more general-purpose game engine does not come with a pre-defined format for resources. Such resources can be structured in all sorts of different ways that is impossible to support without implementing specific support.
On the other hand, what the Unity Engine does provide is a more general-purpose way of displaying text, and that is what this plugin takes advantage of. By knowing what components are used for showing text to the user it is able to hook into these components and change the text as it is shown.


User can change there name to blank even after validation!

Describe the bug
User can change their name to blank
To Reproduce
Steps to reproduce the behavior:

Go to 'https://dogehouse.tv'
Click on 'Edit Profile'

When submitting the name without any content it successfully throws out an error

But when submitting the name with 2 or more spaces in the name field, it successfully changes the name without throwing out the error

Expected behavior
Blank spaces in the user's name shouldn't be considered a valid character during validation
What device are you on?
Chrome: 88.0.4324.182
Additional context
Can be fixed by trimming the name field ( Removing the trailing spaces ) while submitting

yeah definitely  the string Should be trimmed

Hey Ben can I take this one?


Pointless test "unittest" discovered whitch CMake tests enabled.

Git commit reference
ab0142be0199666bfdabc70b3b426ab7af5003db
Describe the bug
Pointless unit test "unittest" added when discovering tests with CMake.
To Reproduce
When creating a test solution for a bot using DPP, and using googletest, a test name "unittest" is added to the discovered tests list and will always fail. googletest url fetched : https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
Happened in my VS Code environment.
Structure :

Bot_Lib (library) links dpp
BotTests (executable) links GTest::gtest_main and Bot_Lib
Bot (executable) links Bot_Lib and a main.cpp file

Expected behavior
Only my tests to be discovered.
Screenshots

Highlighted text looks to be the problem. When I remove it from my fetched dependencies, the "unittest" disappears.
System Details:

OS: Windows 11

i dont get it. why is it pointless? we actively use this in our CI.

im not even sure what you're doing. you're not supposed to build dpp as part of your own code like that.

Oh, ok. I didn't understand why it was here. I was searching for a workaround to this but didn't find any.
I know I am not building the good way but I found it easier for cross-compatibility reasons: I'm coding on my windows, my Ubuntu and I am compiling on a raspberry pi 2B debian which is also my server. (An other reason is that I don't like Visual Studio a lot)
And with googletest, when I discover tests, this "unittest" suddenly appears and fails everytime, that is why I called it "pointless", sorry for the misunderstanding.
(Anyway, if you do not want to support such building process, you can close my ticket and take this as a simple feedback)

you can pass -DDPP_BUILD_TEST=OFF to cmake if you don't want to build unittest


Feature requests

While typically this would probably be split among multiple issues, I actually want to take a stab at doing this on my own and submitting a PR, so I figured I wouldn't clutter up the issues (though there aren't any!).
Intended features:

Base namespace for controllers

something like $route->setNamespace()

Set namespaces on groups

$route->group()->setNamespace()

Nested groups
Allow setStrategy() on groups

$route->group()->setStrategy()

PR's incoming soon. Regarding nested groups:
Which implementation would you prefer? RouteCollection $groups property can be ArrayIterator instead, such as:
    public function __construct(
        ContainerInterface $container = null,
        RouteParser        $parser    = null,
        DataGenerator      $generator = null
    ) {
        $this->container = ($container instanceof ContainerInterface) ? $container : new Container;

        // build parent route collector
        $parser    = ($parser instanceof RouteParser) ? $parser : new StdRouteParser;
        $generator = ($generator instanceof DataGenerator) ? $generator : new GroupCountBasedDataGenerator;
        parent::__construct($parser, $generator);

        $this->groups = new ArrayIterator([]);
    }

or we can pass by reference in the processGroups() foreach:
    public function processGroups()
    {
        foreach ($this->groups as $key => &$group) {
            unset($this->groups[$key]);
            $group();
        }
    }

Both of these retain backwards compatibility thankfully. My initial idea was to invoke $group() early rather than store it in the $groups array, but that means group() will not return a RouteGroup object.
Your thoughts? I think I'm more of a fan of the ArrayIterator approach rather than foreach with a reference.

Strategies are covered by #139 dues to be merged, default/base namespaces are not something I'm looking at right now though.

Crap, I got sidetracked by work and forgot about this. i actually have a lot of this work done on my own repo - would you accept a PR after I finish making sure I have adequate test coverage?

I'm not convinced on the namespace functionality as things stand but may be open to it in the future.

Well the idea is to not have to type out a namespace to a controller, especially if there are multiple controllers in the same namespace.